将数组(非向量)传递给函数 [duplicate]

passing array (not vector) to function [duplicate]

提问人:Le_Square 提问时间:11/7/2023 最后编辑:Le_Square 更新时间:11/7/2023 访问量:67

问:

我想这样做

void DoSomething (int arr[])
{
// do something
}

但不是它arr[]std::array

void DoSomething (std::array <int> arr) // <--- incorrect way to declare an array
{
// do something
}

使用而不是工作,但我希望有一个解决方法,因为工作得很好。std::vectorstd::arraystd::arrayarr[]

这也有效

const int arrSize;
void DoSomething (std::array <int,arrSize> arr)
{
// do something
}

但同样,我希望有一种方法可以在没有任何额外声明的情况下做到这一点。

C++ 数组

评论

0赞 273K 11/7/2023
显示一个最小的可重现示例,说明您将如何调用函数并传递参数。
1赞 drescherjm 11/7/2023
void DoSomething (int arr[])最终传递了一个指针并丢失了所有大小信息,因此 DoSomething 不知道要操作多少个元素。
0赞 Thomas Matthews 11/7/2023
将指针传递到第一个插槽,然后同时传递阵列的容量。将数组传递给函数时,capacity 属性将丢失。
1赞 Evg 11/7/2023
std::array必须指定的固定大小的数组。

答:

2赞 Remy Lebeau 11/7/2023 #1

std::array是一个模板。如果你想接受任何大小的 a,你的函数也必须成为一个模板,例如:std::array

template <size_t N>
void DoSomething (std::array<int, N> arr)
{
    // do something
}

然后,编译器可以根据您传入的任何内容为您推断。Nstd::array

评论

3赞 Pepijn Kramer 11/7/2023
请考虑通过 (const) 引用传递数组,以避免复制数组(const) std::array<int,N>& arr