初识vector

一、定义和初始化vector

1、初始化

vector是模板而非类型,由vector生成的类型必须包含vector中元素的类型。如vector < int >。

1、默认初始化

vector<string> s; 

2、拷贝初始化

注意:字面值不能构造vector对象

vector<int> i;
vecotr<int> i2(i);
vector<int> i3 = i;
vector<int> i4 = 10;    //error
vecotr<string> i5(i);   //error:类型必须匹配

3、使用初始化列表

vector<int> a = {1,2,3,4,5};
vector<int> a2{1,2,3,4,5};
vector<int> a3(1,2,3,4,5);  //error:拷贝时只能有一个初始值

4、使用指定大小进行值初始化

std::vector<int> vec(10);  // 10个int元素,每个都初始化为0

5、使用指定大小和值进行初始化

vector<int> a(10, 1);

2、两个注意

注意1:区别花括号圆括号初始化

vector<int> v1(10); //10个元素,都是0
vector<int> v2{10}; //1个元素,10

vecotr<int> v3(10, 1);//10个元素,都是1
vecotr<int> v4{10, 1};//2个元素,10和1

注意2:使用了花括号初始化列表,但是值不能用来列表初始化,需要考虑构造初始化

vector<string> v5{"hello"}; 

vector<string> v6("hello"); 
//不能用字面值进行构造初始化

vector<string> v7{10};  
//使用int进行初始化,类型不符,需要考虑构造初始化,结果是10个默认初始化的元素
//相当于vector<string> v7(10);

vector<string> v8{10, "hello"};
//使用列表初始化,第一个元素值不是string类型,需要考虑是否为构造初始化,结果是10个hello。
//相当于vector<string> v8(10, "hello");

二、向vector中添加元素

上面初始化适用于初始元素较少的时候,元素多了一般定义一个空的vector,再用push_back进行添加。在C++中,vector可以高效增长,所有尽量不给vector设置大小。

push_back方式添加元素

vector<int> a;
int num;
while(cin >> num)
{
    a.push_back(num);
}

注意:不能使用下标添加元素

vector<int> a;
for(i = 0; i != 10; i++)
{
    a[i] = i;
}
//error,a中本来不包括任何元素

三、其他vector操作

操作与string的其他操作相同。

注意,在进行下标操作的时候只能对已经存在的元素执行。尽量使用范围for语句,确保下标的合法

vector<int> a(10);
cout << a[9] << endl;
cout << a[9] << endl;   //error:下标越界

四、使用数组初始化vector对象

int arr[] = {1,2,3,4,5,6};

vector<int> a(begin(arr), end(arr));

vector<int> b(arr + 1, arr + 6);
//拷贝第2到第6个
posted @ 2024-05-10 17:57  baobaobashi  阅读(3)  评论(0编辑  收藏  举报