C++初始化向量

day*_*yup 2 c++ constructor stl initialization vector

任何人都可以向我解释为什么我们可以这样初始化矢量?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.但是这两种方式没有关系.如何解释第一个.如果我们知道值,那么初始化向量的最佳方式(大多数人使用的)是什么.

Vla*_*cow 7

类std :: vector具有接受一对输入迭代器的构造函数

template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
Run Code Online (Sandbox Code Playgroud)

而这个宣言

std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
Run Code Online (Sandbox Code Playgroud)

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

这里aa + sizeof(a)/sizeof(int)两个指针指定了从创建的对象类型的数组中获取的一系列初始值设定项std::vector<int>.

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

std::vector<int> v { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

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