如何传递未知大小的std :: array?在C ++中

时间:2018-09-21 06:52:49

标签: c++ arrays

我想传递一个定义为

的C ++ std :: array
array<int,100> arrayName

到另一个函数,但是我不想在此处指定大小,因此仅在创建数组时就可以轻松更改大小。

我该怎么写?我不会写

function(array<> arrayName)

就像我对char数组所做的那样...

亲切的问候,艾奥瓦。

2 个答案:

答案 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点。仍然不希望使用它,您可以使用两个数组并使用一些指针来创建自己的动态数组。