1140 字
6 分钟
C++STL简单用法
头文件 #include <algorithm>
向量容器 vector
#include <vector>//创建vector对象vvector<int> v;vector<double> v(10);vector<double> v(10,8.6);
//尾部元素扩张v.push_back(2);
v[0]=2; //下标方式访问 vector 元素
//用迭代器访问 vector 元素vector<int>::iterator it;//定义迭代器变量for(it=v.begin();it!=v.end();it++) { //输出迭代器上的元素值 cout<<*it<<" "; }//在最前面插入新元素,元素值为 8v.insert(v.begin(),8);//在第 2 个元素前插入新元素 1v.insert(v.begin()+2,1);//在向量末尾追加新元素 3v.insert(v.end(),3);
//删除 2 个元素,从 0 开始计数v.erase(v.begin()+2);//删除迭代器第 1 到第 5 区间的所有元素v.erase(v.begin()+1,v.begin()+5);//反向排列向量的从首到尾间的元素reverse(v.begin(),v.end());
//排序,升序排列sort(v.begin(),v.end());v.size();//返回vextor大小//返回向量是否为空,非空返回逻辑0,否则返回1v.empty();基本字符系列容器 string
#include <string>string s;s="hello,C++STL";// string 对象尾部追加字符串s=s+'a'; //在 string 对象的尾部添加一个字符(char)'',或字符串""s.append("abc");//把一个字符插入到迭代器位置之前s.insert(it+1,'p');//删除第 3 个元素,元素位置从 0 开始计数s.erase(it+3);s.length();//返回长度//从第 3 个开始,将连续的 3 个字符替换为“good”//即将“abc”替换为“good”s.replace(3,3,"good");//查找第一个字符‘c’,返回下标值,查不到则返回 4294967295s.find('c');
//用 compare()方法与其他字符串相比较。如果它比对方大,则返回 1;//如果它比对方小,则返回-1;如果它与对方相同(相等),则返回 0s.compare("cat");reverse(s.begin(),s.end());
//将字符串分离成子串,分隔符为空格sscanf("abc 123 pc","%s %s %s",sa,sb,sc);//将字符串分离成数字,分隔符为“,”和“$”//当用到数字的时候,跟 scanf 一样,它要传指针地址int x,y,z;sscanf("4,5$6","%d,%d$%d",&x,&y,&z);//将数值转换为 string 的一种方法:(C 方法)char b[10];string a;sprintf(b,"%d",1975);a=b;集合容器 平衡二叉检索树 set
#include <set>set<int> s;multiset<int> s;s.insert(1);s.erase(6);s.size();it=s.find(6);//反向遍历集合中的元素 set<int>::reverse_iterator rit;//定义反向迭代器 for(rit=s.rbegin();rit!=s.rend();rit++) { cout<<*rit<<" "; }
//自定义比较函数 myComp,重载“()”操作符struct myComp { bool operator()(const int &a,const int &b) { if(a!=b){ return a>b; } else{ return a>b; } }};set<int,myComp> s;
struct Info { string name; float score; //重载“<”操作符,自定义排序规则 bool operator < (const Info &a) const { //按 score 由大到小排列。如果要由小到大排列,使用“>”号即可。 return a.score<score; }};set<Info> s;堆栈容器 stack
#include <stack>//定义堆栈 s,其元素类型是整型stack<int> s;//元素入栈s.push(1);while(s.empty()!=true)//堆栈非空 { cout<<s.top()<<" ";//读取栈顶元素 s.pop();//出栈(即删除栈顶元素) }双向链表容器 list
#include <list>list<int> l;//在链表尾部插入新元素,链表自动扩张l.push_back(2);//在链表头部插入新元素,链表自动扩张l.push_front(8);//删除值等于 1 的所有元素l.remove(1);//删除首元素l.pop_front();//删除尾元素l.pop_back();//采用 find()查找算法在链表中查找it=find( l.begin(), l.end(),5 );//使用 sort()方法对链表排序,是升序排列l.sort();//剔除连续重复元素(只保留一个)l.unique();映照容器 map
#include <map>map<string,float> m;//插入元素,按键值的由小到大放入黑白树中 m["Jack"]=98.5; m["Bomi"]=96.0; m["Kate"]=97.5;cout<<(*it).first<<" : "<<(*it).second<<endl;队列容器 queue
#include <queue>//定义队列,元素类型是整型queue<int> q;//入队,即插入元素q.push(1);//队首元素出队(删除队首元素)q.pop();//读取队首元素cout<<q.front()<<endl; //读取队尾元素cout<<q.back()<<endl;q.size();q.empty();优先队列容器 queue
#include <queue> //定义优先队列,元素类型为整型priority_queue<int> pq;//入队,插入新元素pq.push(1);//读取当前队首元素cout<<pq.top()<<" ";//出队,删除队首元素pq.pop();双端队列容器 deque
#include <deque>deque<int> d;//使用 push_back()方法从尾部插入元素,会不断扩张队列d.push_back(2);//从头部插入元素,不会增加新元素,只将原有的元素覆盖d.push_front(10);//中间插入元素,不会增加新元素,只将原有的元素覆盖d.insert(d.begin()+1,88);//从头部删除元素d.pop_front();//从尾部删除元素d.pop_back();//从中间删除元素,erase 的参数是迭代器位置d.erase(d.begin()+1);//清空元素d.clear();位集合容器 bitset
#include <bitset>bitset<100000> b;//必须要指定bitset容器的大小,大小一经定义,就不能修改了//采用下标法给元素赋值 b[1]=1; b[6]=1;//采用 set()方法,一次性将元素设置为 1b.set();//直接向输出流输出全部元素 cout<<b<<endl;