C ++初始化向量

时间:2015-07-10 21:03:55

标签: c++ vector constructor stl initialization

有人可以向我解释为什么我们可以这样初始化矢量吗? int a[]={1,2,3,4,5}; std::vector<int> vec(a,a+sizeof(a)/sizeof(int));我也知道这种方式std::vector<int> vec(5,0);意味着vec有五个元素,它们都被初始化为0.但是这两种方式没有关系。如何解释第一个。如果我们知道值,那么初始化向量的最佳方式(大多数人使用的)是什么。

3 个答案:

答案 0 :(得分:7)

类std :: vector具有接受一对输入迭代器

的构造函数
template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());

这个宣言

std::vector<int> vec(a,a+sizeof(a)/sizeof(int));

包括构造函数的调用,其中aa + sizeof(a)/sizeof(int)是两个随机访问迭代器,因为指针具有这样的迭代器类别。

此处aa + sizeof(a)/sizeof(int)是两个指针,用于指定从数组中为std::vector<int>类型的已创建对象获取的初始值设定项范围。

考虑到您还可以使用接受初始化列表的构造函数。例如

std::vector<int> v { 1, 2, 3, 4, 5 };

从C ++ 2011开始支持此构造函数。

答案 1 :(得分:0)

您也可以使用:

int a[5]={1,2,3,4,5};
std::vector<int> vec;
for(int i=0; i<5: i++) vec.push_back(a[i]);

答案 2 :(得分:0)

std::vector<int> a = {1,2,3,4,5};

从C ++ 11开始。

请参阅: http://en.cppreference.com/w/cpp/language/list_initialization