向量的 C++ 初始化
C++ initialization of 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。但是这两种方式没有关系。第一个怎么解释。如果我们知道值,初始化向量的最佳方法是什么(大多数人使用的方法)。
Class std::vector 具有接受一对输入迭代器的构造函数
template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
和这个声明
std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
包括对构造函数的调用,其中 a
和 a + sizeof(a)/sizeof(int)
是两个随机访问迭代器,因为指针具有此类迭代器。
这里 a
和 a + sizeof(a)/sizeof(int)
是两个指针,它们指定从数组中获取的初始化器范围,用于创建类型为 std::vector<int>
的对象。
考虑到您也可以使用接受初始化列表的构造函数。例如
std::vector<int> v { 1, 2, 3, 4, 5 };
从 C++ 2011 开始支持此构造函数。
您还可以使用:
int a[5]={1,2,3,4,5};
std::vector<int> vec;
for(int i=0; i<5: i++) vec.push_back(a[i]);
std::vector<int> a = {1,2,3,4,5};
从 C++11 开始工作。
参见:
http://en.cppreference.com/w/cpp/language/list_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。但是这两种方式没有关系。第一个怎么解释。如果我们知道值,初始化向量的最佳方法是什么(大多数人使用的方法)。
Class std::vector 具有接受一对输入迭代器的构造函数
template <class InputIterator>
vector(InputIterator first, InputIterator last, const Allocator& = Allocator());
和这个声明
std::vector<int> vec(a,a+sizeof(a)/sizeof(int));
包括对构造函数的调用,其中 a
和 a + sizeof(a)/sizeof(int)
是两个随机访问迭代器,因为指针具有此类迭代器。
这里 a
和 a + sizeof(a)/sizeof(int)
是两个指针,它们指定从数组中获取的初始化器范围,用于创建类型为 std::vector<int>
的对象。
考虑到您也可以使用接受初始化列表的构造函数。例如
std::vector<int> v { 1, 2, 3, 4, 5 };
从 C++ 2011 开始支持此构造函数。
您还可以使用:
int a[5]={1,2,3,4,5};
std::vector<int> vec;
for(int i=0; i<5: i++) vec.push_back(a[i]);
std::vector<int> a = {1,2,3,4,5};
从 C++11 开始工作。
参见: http://en.cppreference.com/w/cpp/language/list_initialization