标准库类型vector
表示对象的合集,其中所有对象的类型都相同。集合中每个对象都有与之对应的索引,索引用于访问对象,我们也常常称之为对象
定义和初始化vector对象
vector<T> a1 //a1是一个空vector,他潜在的元素是T类型的,执行默认初始化
vector<T> a2(a1) //v2中含有v1所有元素的副本
vector<T> a3=a1 //等价于a3(a1)
vector<T> a4(n,val) //a4中包含了n个重复的元素,每个元素都是val
vector<T> a5(n) //包含了n个默认初始化对象
vector<T> a6{a,b,c,d,e} //a6包含了初始值个数的元素,每个元素被赋予相应的初始值
vector<T> a7={a,b,c,d,e} //等价于a7{a,b,c,d,e}
#include<iostream>
using namespace std;
#include<vector>int main()
{vector<int> a1;vector<int> a2(a1);vector<int> a3=a1;vector<int> a4(5, 10);vector<int> a5{1,2,3,4,5};vector<int> a6 = { 1, 2, 3, 4, 5 };//cout << a1[0] << endl;//cout << a2[0] << endl;//cout << a3[0] << endl; 因为a1,a2,a3都为空,所以不能访问cout << a4[0] << endl;cout << a5[0] << endl;cout << a6[0] << endl;system("pause");return 0;
}
列表初始化vector对象
- 使用拷贝初始化时,只能提供一个初始值
- 如果提供一个类内初始值,则只能使用拷贝初始化或者花括号的形式初始化
- 如果提供的是初始元素值的列表,则只能把初始值都放在花括号里面进行初始化
列表初始化还是元素个数?
如果用的圆括号,可以说提供的值是用来构造vector对象的
vector<int> a1(10); //有10个元素,每个都是0
vector<int> a2{ 10 }; //有1个元素,值为10
vector<int> a3(10, 1); //有10个元素,每个都是1
vector<int> a4{ 10, 1 }; //有两个元素,值分别是10和1
如果使用的是花括号,可以表述为我们想列表初始化该vector对象。
vector<string> b1{ "abc" }; //有一个元素
//vector<string> b2("abc"); //不能使用字符串构件vector对象
vector<string> b1{ 10 }; //有10个元素
vector<string> b1{ 10, "abc" }; //有10个值为abc的元素
要想初始化vector对象,花括号里的值必须与元素类型相同。如果不同,则不呢个作为元素的初始值,因此编译器会尝试用默认初始化vector对象
添加元素push_back
用该方法添加的对象都是添加到vector对象的末尾
vector<int>a;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}
其它vector操作
a.empty() //如果不含任何元素则为真
a.size() //返回元素个数
a.push_back() //向尾端添加一个元素
a[n] //返回第n个元素的引用
a=b //替换元素
a={a,b,c,d} //替换元素
a==b //判断是否相等
a!=b //判断是否不等
<,<=,>,>= //以字典顺序进行比较
索引
使用下标运算符能获取到指定的元素。和string一样,vector的对象下标也是从0开始,下标的类型是相应的size_type。