2015-07-10 105 views
2

有人可以向我解释为什么我们可以用这种方式初始化向量? 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.但这两种方式是不相关的。如何解释第一个。如果我们知道这些值,那么最好的方法(大多数人使用什么)来初始化矢量。C++初始化向量

+0

'的std ::矢量 X = {1,2,3};'工作得很好我。获得一个更新的编译器。 –

+0

可能的重复[什么是最简单的方式来初始化一个std ::向量与硬编码元素?](http://stackoverflow.com/questions/2236197/what-is-the-easiest-way-to-initialize-a -stdvector-with-hardcoded-elements) –

+0

谢谢。它看起来像只有C++ 11或更新版本支持这种方式 – daydayup

回答

7

类的std ::矢量具有构造接受一对输入迭代器

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

+0

谢谢你的解释! – daydayup

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]); 
+0

谢谢!这个更容易理解 – daydayup