vector
头文件:#include<vector>
1. 创建普通变量
vector<int> x(v[1]); //用v[1]初始化 vector<int> y=v[2]; //用v[2]初始化 vextor<string> sevc{"vb","vc"}; //字符串初始化
2. 指定数量的元素
vector<int> ivec(10,-1); //10个int元素,每个都初始化为-1,若不指定-1则均初始化为0; vector<string> svec(10,"hello") ; //均已“hello”初始化
3. 创建二维数组
vector<vector<ing>> arr(2,vector<int>(5)); //相当于二维数组a[2][5]; vector<int> V[10]; //表示10个容器
4. 迭代器,相当于指针
vector<int>::iterator it; //it读写vector<int>中的元素 string::iterator st; //读写string对象中的字符 vector<int>::const_iterator it2; //it2只能读元素,不能写元素 string::const_iterator it3; //it3只能读字符,不能写字符
使用方法eg:
int a[6]={1,2,3,4,5,6}; vector<int> b(a,a+4); for(vector<int>::iterator it=b.begin();it!=b.end();it++) { cout<<*it<<" "; }
5. 常用部分:
V.begin(); //开始 V.end(); //结尾 V.push_back(1); //将元素1压入 V.pop_back(); //删除容器最后一个元素 V.empty() //判断容器是否为空 V.size(); //返回容器大小 V[3]; //取第三个元素此种类型的下标只能获取已经存在的元素,若不存在只能用push_back()压入
6. 常用的初始化方式
(1).清空元素,但不回收空间:
V.clear();
(2).使用erase循环删除,不回收空间
vector<int>::iterator it; for(it=v.begin();it!=v.end();) { //注意使用erase()方法时,迭代不要随意的++ it = vecnum.erase(it); }
注:erase在每次操作时,迭代器指针会整体前移1,就是每次都会移动全部数据,所以vector不适合做频繁删除的容器
erase还有一种用法:iterator erase(iterator first,iterator last)
即删除first和last之间的元素,返回值:指向删除元素(或范围)的下一个元素。
eg:vector v中保存的为{1,2,3,4,5,6,7,8},执行:
v.erase(v.begin(),v.begin()+5); vector<int>::iterator it; for(it=v.begin();it!=v.end();it++) { cout<<*it<<endl; }
得到结果:
(3).最简单的使用swap,清除元素并回收内存
// 写法一 vector<int>().swap(vecnum); //写法二 vecnum.swap(vector<int>());
7. 其他一些不太常用的操作
//将a的现有元素个数调至10个,多则删,少则补,其值随机 a.rezize(10); //将a的现有元素个数调至10个,多则删,少则补,其值为2 a.rezize(10,2); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4 a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5 a.insert(a.begin()+1,3,5); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8,插入元素后为1,4,5,9,2,3,4,5,9,8 a.insert(a.begin()+1,b+3,b+6); //b为向量,将b的0~2个元素构成的向量赋给a a.assign(b.begin(), b.begin()+3); //定义了a值为b中第0个到第2个(共3个)元素 初始化 vector<int>a(b.begin(),b.begin+3);
stack
头文件:#include<stack>
1. 常用部分
stack<int> S; //定义 count=S.size(); //count为栈中元素数目 a=S.top(); //a为栈顶元素 S.pop(); //弹出栈顶元素 S.push(a); //在栈顶增加元素 bool=S.empty(); //堆栈为空则返回真
queue
头文件:#include<queue>
1. 常用操作
queue<int> Q; Q.push(1); //1入队列 Q.pop(); //返回队列第一个值 //只能直接弹出,不能带返回值 x=Q.top() //可以获取队头元素即下一个即将弹出队列的元素 //结合起来 即若想弹出队列第一个元素并且带有返回值: //x=Q.front(); Q.pop(); Q.back() //队尾元素 Q.size() //元素个数
附:优先队列可用作大顶堆or小顶堆,定义优先队列方式:
priority_queue<int> Q; //默认为大顶堆 priority_queue <int,vector<int>,greater<int> > q; //升序队列,取出的为队列中最小的元素,相当于小顶堆 priority_queue <int,vector<int>,less<int> >q; //降序队列,相当于大顶堆
string
头文件:#include<string>
1.定义及初始化
string s1; //默认构造函数,s1位空串 string s2(s1); //将s2初始化为s1的一个副本 string s3("value"); //将s3初始化为一个字符串字面值副本 string s4(n,'c'); //将s4初始化为字符'c'的n个副本 string s(cp,n); //创建一个string对象,它被初始化为cp所指向数组的前n个元素副本 string s(s2,pos2); //创建一个string对象,它被初始化为一个已存在的string对象s2中从下标pos2开始的字符的副本如果pos2>s.size(),则该操作未定义 string s(s2,pos2,len2); //创建一个string对象,它被初始化为s2中从下标pos2开始的len2个字符的副本如果pos2>s2.size(),则该操作未定义无论len2的值是多少,最多只能复制s2.size()-pos2个字符
2.string 读写
cin>>s;
a.读取并忽略开头所有的空白字符(如空格,换行符,制表符,进纸符)
b.读取字符直至再次遇到空白符,读取终止
3.string 对象操作
s.empty(); //如果s为空串,则返回true,否则返回false s.size(); //返回s 中字符的字符个数 s[n] //返回s中位置为n的字符,位置从0开始计数 s1+s2 //把s1和s2链接成一个新的字符串,返回新生成的字符串!!!注意不能使用类似:`str+'A'` (string+字符)!!! s1=s2; //把s1内容替换为s2的副本 v1==v2; //判断v1与v2的内容,相等则返回true,否则返回false !=, <, <=, >, >=,+= //保持这些操作的惯有含义
4.修改string对象
迭代器定义:string::iterator it
//关于迭代器 s.insert(p,t); //在迭代器p指向的元素之前插入一个值为t的新元素。返回指向新插入元素的迭代器 s.insert(p,n,t); //在迭代器p指向的元素之前插入n个值为t的新元素。返回void s.insert(p,b,e); //在迭代器p指向的元素之前插入b和e标记范围内所有的元素,返回void s.assign(b,e); //用迭代器b和e标记范围内的元素替换s。对于string类型,该操作返回s,对于容器类型,则返回void s.assign(n,t); //用值为t的n个副本替换s。对于string类型,该操作返回s,对于容器类型,返回void s.erase(p); //删除迭代器p指向的元素,返回一个迭代器,指向被删除元素后面的元素 s.erase(b,e); //删除迭代器b和e标记范围内所有的元素,返回一个迭代器,指向被删除元素段后面的第一个元素 reverse(b,e); //把迭代器b和e标记范围内的所有元素反转 //关于使用数组下标 s.insert(pos,n,c); //在下表pos的元素之前插入n个字符c s.insert(pos,s2); //在下标为pos的元素之前插入string对象s2的副本 s.insert(pos,s2,pos2,len); //在下标为pos的元素之前插入s2中从下标pos2开始len个字符 s.insert(pos,cp,len); //在下标为pos的元素之前插入cp所指向数组的前len个字符 s.insert(pos,cp); //在下标为pos的元素之前插入cp所指向的以空字符结束的字符串副本 s.assign(s2); //用s2的副本替换s s.assign(s2,pos2,len); //用s2中从下标pos2开始的len个字符副本替换s s.assign(cp,len); //用cp所指向数组的前len个字符副本替换s s.assign(cp); //用cp所指向的以空字符结束的字符串副本替换s s.erase(pos,len); //删除从下标为pos开始的len个字符
来源:https://www.cnblogs.com/wwj321/p/12381569.html