我想传递一个定义为
的C ++ std :: arrayarray<int,100> arrayName
到另一个函数,但是我不想在此处指定大小,因此仅在创建数组时就可以轻松更改大小。
我该怎么写?我不会写
function(array<> arrayName)
就像我对char数组所做的那样...
亲切的问候,艾奥瓦。
答案 0 :(得分:5)
如果您知道在编译时的数组大小(如使用std::array
所暗示的那样),则可以使用模板进行救援。要严格支持std::array
中的int
个大小不同的文件,您可以执行以下操作:
#include <array>
template <size_t N>
void ArrayFunc(std::array<int, N> arr)
{
// Do something with `arr`
}
int main()
{
std::array<int, 10> arr10;
std::array<int, 20> arr20;
ArrayFunc(arr10);
ArrayFunc(arr20);
return 0;
}
请注意arr
的{{1}}参数的传值按值,这是您是否应该考虑的事情-我只是在遵循您的示例(在您的问题中。如果您真的不想为每个函数调用复制整个ArrayFunc()
,则可以执行以下任一操作:
std::array
或
template <size_t N>
void ArrayFunc(std::array<int, N>& arr)
取决于您是否要在函数中修改template <size_t N>
void ArrayFunc(const std::array<int, N>& arr)
。
答案 1 :(得分:0)
使用向量将是一个很好的选择,因为它本质上是动态的,但是要小心,因为它占用更多空间,因此它会在初始值之后增加一倍,例如向量u声明10之后为10它将在20之后得到20变为30得到20到10点。仍然不希望使用它,您可以使用两个数组并使用一些指针来创建自己的动态数组。