在下面的代码中,函数(foo)参数(std::vector
)的大小可以是使函数成为通用函数的任何东西。但是,有时大小容器是已知的,因此可以使用std :: array。问题是将std::array
转换为std::vector
。解决这个问题的最佳方法是什么?在这种情况下,总是使用std::vector
更好吗?
#include <iostream>
#include <array>
#include <vector>
using namespace std;
// generic function: size of the container can be anything
void foo (vector<int>& vec)
{
// do something
}
int main()
{
array<int,3> arr; // size is known. why use std::vector?
foo (arr); // cannot convert std::array to std::vector
return 0;
}
答案 0 :(得分:16)
鉴于您传入array
,foo
似乎没有调整传入的容器的大小(但是,它确实会修改元素,因为vec
传递非-const)。因此,除了如何访问元素之外,它不需要知道任何有关底层容器的信息。
然后,您可以传递一对迭代器(并使迭代器类型成为模板参数),就像许多STL算法一样。
答案 1 :(得分:0)
该函数通过引用接受向量。因此将std :: array类型的对象传递给函数没有任何意义。如果将函数的参数定义为对向量的const引用,则可能有意义。