📅  最后修改于: 2023-12-03 14:56:17.853000             🧑  作者: Mango
在C++中,向量是一种非常有用的数据结构,因为它可以动态增加或减少大小。这篇文章将介绍六种不同的方式来初始化向量。
这种方式会初始化向量为指定大小,并将所有元素赋予一个初值。
vector<int> vec(5,0); // 初始化为大小为5,初值为0的int向量
解释:
vector<int>
:创建一个存储整型变量的向量vec(5,0)
:初始化向量为大小为5,初值为0的向量在这种情况下,向量的初始化值是由其它向量提供的,新的向量会从旧向量里复制所有的值。这个过程通常被称为“拷贝构造”。
vector<int> oldVec{1,2,3,4,5}; // 旧向量
vector<int> newVec(oldVec); // 使用旧向量来初始化新向量,通过拷贝构造
解释:
vector<int> oldVec{1,2,3,4,5}
:创建一个值为1,2,3,4,5的向量vector<int> newVec(oldVec)
:使用旧的向量oldVec
来初始化新向量newVec
,通过拷贝构造我们可以使用C数组来初始化向量。
int arr[] = {1,2,3,4,5}; // 原始数组
vector<int> vec(arr, arr+sizeof(arr)/sizeof(arr[0])); // 使用C数组来初始化
解释:
int arr[] = {1,2,3,4,5}
:创建一个整型数组,值为1,2,3,4,5sizeof(arr)/sizeof(arr[0])
:获取数组元素的个数,这里是5我们同样可以使用迭代器来初始化向量。这种方式只需要提供一个指向要拷贝的值的开始和结束的迭代器就可以。
int arr[] = {1,2,3,4,5}; // 原始数组
vector<int> vec(arr, arr+sizeof(arr)/sizeof(arr[0])); // 使用C数组来初始化
vector<int> newVec(vec.begin(), vec.end()); // 使用迭代器来初始化
解释:
vec.begin()
:返回向量的起始位置vec.end()
:返回向量的结束位置在C++11之前,我们需要使用下面的方法来按值列来初始化:
vector<int> vec = boost::assign::list_of(1)(2)(3)(4)(5); // 使用boost::assign库
但是在C++11及以后的版本中,我们可以简单地使用如下方式:
vector<int> vec = {1,2,3,4,5}; // 用初始值列初始化
解释:
{1,2,3,4,5}
:这是一个初始值列,它包括了所有的值。我们也可以结合数组、指针和初始值列表来初始化向量。
int arr[] = {1,2}; // 数组
int *p = arr; // 指针
vector<int> vec {p, p+2, 3, 4, 5}; // 向量初始化
解释:
p
:arr
数组的第一个元素的地址。p+2
:arr
数组的第三个元素的地址。总之,这里有六种不同的方式来初始化向量。我们可以根据自己的需求来选择一个最适合自己的方式。