vector相当于一个动态数组,可以对其进行插入、增加等操作,使用vector容器,可以避免再去使用C类型的动态数组。
其初等层次的学习可以围绕在其相关的函数展开。
1.初始化
其初始化有多种方式,见下代码和注释:
#include<iostream> #include<vector> #include<algorithm> using namespace std; typedef int Type; int main() { vector<Type>a;//默认初始化Type类型名为a的动态数组 ,为空。 vector<Type>b(10,5);// 初始化Type类型名为b大小为10,初始值为5的动态数组 vector<Type>c=b; vector<Type>d(c);//创建拷贝 vector<Type>e={1,2,3,4};//列表初始化,!!!但实际上我的Dev-C++编译不通过,不知道原因。 return 0;
2.增减插删
实际中,常常是创建一个vector对象后再对其进行增减插删等操作,主要依靠以下几个函数。
1.push_back(elem)
将数据添加到尾部。对于一个空的vector,不能使用下标向其中添加元素。只能使用push_back,只能对确知已存在的元素执行下标操作
2.pop_back()
将vector中尾部数据删除。
3.insert(a,elem)
在a位置前插入数据。
4.erase(a)
删除a位置上的元素,若是erase(a,b),则删除位置处于[a,b)上的元素。
5.clear()
全清。
3.访问
1.下标访问
注意只能对确知已存在的元素执行下标操作。
2.迭代器访问
可以类比于指针,设s为vector对象,s.begin()表示首地址,s.end()表示末地址,迭代器定义为vector::iterator p;
下为结合增删访问的例子:
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { vector<string>s; s.push_back("hello"); s.push_back(" "); s.push_back("world"); s.push_back("a"); for(int i=0;i<4;i++)//下标访问 cout<<s[i]; cout<<endl; s.insert(s.begin()+3,"!"); s.pop_back(); vector<string>::iterator it; for(it=s.begin();it!=s.end();it++)//迭代器访问 cout<<*it; return 0; }
结果:
4.延伸
1.二维数组的定义
vector<int*>a或vector<vector > a; //定义一个二维数组 a[0].size(); //指第一行的列数
至于输入就应该一行行即一个一维数组输入。
2.与sort,reverse这些算法可以结合
sort前面已经提及,reverse(a,b)是指将[a,b)上的元素翻转。