-1
void sortArray(int arr[])
{
    int size = sizeof(arr)/sizeof(arr[0]);
    int count0s{0},count1s{0},count2s{0};
     for (int n: arr)
     {

     }

}
int main()
{
    //some code here including creating array arr
        sortArray(arr);
        TestCases--;
    }

    return 0;
}

我想在sortArray函数中使用基于范围的 for 循环,但我不知道如何传递它。 在此处输入图像描述

4

3 回答 3

2

参数int arr[/*N*/]实际上是一个指针,(您不能按值传递 C 数组)。

但是您可以通过引用传递它(语法可能会令人惊讶):

template <std::size_t N>
void sortArray(int (&arr)[N])
{
    // ...
}
于 2020-11-27T09:23:16.647 回答
1

您可以使用 C++ std::array

#include <array>
#include <iostream>

void sortArray(std::array<int, 5> &arr)
{

    int count0s{0},count1s{0},count2s{0};
     for (int n: arr)
     {

     }

}
int main()
{
    std::array<int, 5> arr;
    sortArray(arr);
  
    return 0;
}

或 C++ std::vector

#include <iostream>
#include <vector>

void sortArray(std::vector<int> &arr)
{

    int count0s{0},count1s{0},count2s{0};
     for (int n: arr)
     {

     }

}
int main()
{
    std::vector<int> arr;
    sortArray(arr);
  
    return 0;
}

使用模板来避免函数中的固定大小和类型:

#include <array>
#include <iostream>

template<typename T>
void sortArray(T &arr)
{
    int count0s{0},count1s{0},count2s{0};
    for (int n: arr)
    {
    }
}
int main()
{
    // it works with C arrays
    int arr[5];
    sortArray(arr);
    std::array<int, 5> arr2;
    sortArray(arr2);
    std::array<double, 5> arr3;
    sortArray(arr3);
    std::vector<double> arr4;
    sortArray(arr4);

    return 0;
}

使用 C++20,您可以

#include <array>
#include <iostream>

void sortArray(auto &arr)
{
    int count0s{0},count1s{0},count2s{0};
    for (int n: arr)
    {
    }
}
int main()
{
    int arr[5];
    sortArray(arr);
    std::array<int, 5> arr2;
    sortArray(arr2);
    std::array<double, 5> arr3;
    sortArray(arr3);
    std::vector<double> arr4;
    sortArray(arr4);

    return 0;
}
于 2020-11-27T09:24:53.717 回答
0

从 c++20 开始,您可以使用std::span<T>

void func(std::span<int> values) {
    for(auto& i : values) {
        std::cout << i << std::endl;
    }
}
int main() {
    int* arr = new int[5]{0,1,2,3,4};
    func({arr,5});
}
于 2020-11-27T09:34:06.313 回答