8

在下面的代码中,函数 (foo) 参数 ( std::vector) 的大小可以是使函数成为通用函数的任何值。但是,有时大小容器是已知的,因此可以使用 std::array。问题是std::arraystd::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;
}
4

2 回答 2

16

鉴于您传入array,foo似乎并没有调整它传入的容器的大小(但是,它似乎确实修改了元素,因为vec传递的是非常量)。因此,除了如何访问元素之外,它不需要了解有关底层容器的任何信息。

然后,您可以传递一对迭代器(并使迭代器类型为模板参数),就像许多 STL 算法所做的那样。

于 2014-07-22T17:49:59.880 回答
0

该函数通过引用接受向量。因此,将 std::array 类型的对象传递给函数是没有任何意义的。如果将函数的参数定义为对向量的 const 引用,这可能是有意义的。

于 2014-07-22T17:50:53.413 回答