1 stack<int>q; 2 q.push(1); //入栈 3 q.pop(); //出栈 4 q.top(); //返回栈顶成员 5 q.size(); //返回栈成员个数 6 q.empty(); //判断是否为空栈
1 queue<int>q; 2 q.push(1); //入队列 3 q.pop(); //出队列 4 q.front(); //返回最上面(最后进入)的成员 5 q.size(); //返回队列成员个数 6 q.empty(); //判断是否为空队列
1 priority_queue<int,vector<int>,greater<int> >q; 2 q.push(1); //入优先队列 3 q.top(); //返回优先队列头成员 4 q.pop(); //出优先队列 5 q.size(); //返回优先队列成员个数 6 q.empty(); //判断是否为空优先队列
1 struct node{ 2 int x,y; 3 4 //重载运算符,按x的值排优先级 5 friend operator < (node a,node b){ 6 return a.x < b.x; 7 } 8 };
1 struct node{ 2 int x,y; 3 }; 4 struct cmp{ 5 //重载运算符,按x的值排优先级 6 bool operator() (node a,node b){ 7 return a.x < b.x; 8 } 9 }; 10 11 priority_queue<node,vector<node>,cmp >q;
1 int num[] = {1,2,3,4,5,6}; 2 deque<int>q; //建立一个空双向队列 3 deque<int>p(5); //建立一个具备5个成员的双向队列 4 deque<int>s(5,1); //建立一个具备5个成员且初始值为1的双向队列 5 deque<int>s2(s); //建立一个双向队列s2,并拷贝s中全部成员 6 deque<int>n(num,num+5); //建立一个双向队列n,并拷贝num至num+5中元素入队 7 8 q.push_front(a); //头部入队 9 q.pop_back(b); //尾部入队 10 q.insert(iter,x); //在iter位置插入x,iter为迭代器 11 q.pop_front(); //头部出队 12 q.pop_back(); //尾部出队 13 14 q.front(); //返回头成员 15 q.back(); //返回尾元素 16 q.size(); //返回双向队列成员个数 17 q.max_size(); //返回系统支持成员最大个数 18 q.empty(); //判断双向队列是否为空 19 20 q.at(i); //返回第i个元素 21 q.begin(); //返回头部迭代器 22 q.end(); //返回尾部迭代器 23 q.rbegin(); //返回尾部反向迭代器 24 q.rend(); //返回头部反向迭代器 25 26 q.erase(iter); //删除iter元素,iter为迭代器 27 q.clear(); //状况双向队列 28 q.swap(p); //交换q和p中的全部元素
1 vector<int>q; //建立空Vector 2 vector<int>p(5); //建立拥有5个成员的Vector 3 vector<int>s(5,1); //建立拥有5个成员,且初始值为1的Vector 4 vector<int>s2(s); //建立s2,并拷贝s元素给s2 5 vector<int>s3(s.begin(),s.end()); //建立s3,拷贝s.begin()至s.end()中元素给s3 6 7 q.push_back(x); //尾部加入元素 8 q.insert(iter,x); //在iter位置插入x,传回新数据位置 9 q.insert(iter,n,x); //在iter位置插入n个x,无返回值 10 q.insert(iter,l,r); //在iter位置插入[l,r)区间内的数据,无返回值 11 q.pop_back(); //删除最后一个元素 12 q.front(); //返回第一个数据 13 q.back(); //返回最后一个数据 14 15 q.size(); //返回容器内成员个数 16 q.resize(x); //从新指定容器大小 17 q.empty(); //判断Vector是否为空 18 q.capacity(); //返回Vector可用空间的大小 19 q.reserve(); //从新指定空间大小,小于当前capacity时保持为本来的capacity值 20 q.swap(p); //交换p,q容器内元素 21 q.assign(iter1,iter2); //将区间[iter1,iter2)内元素赋值给vector,并清空vector容器以前的内容。 22 q.assign(n,x); //将n个x赋值到vector中,并清空vector容器以前的内容。 23 24 q.at(i); //返回第i个元素 25 q.begin(); //返回头位置迭代器 26 q.end(); //返回尾位置迭代器 27 q.rbegin(); //返回尾部反向迭代器 28 q.rend(); //返回头部反向迭代器 29 30 q.clear(); //状况Vector 31 q.erase(); //删除iter位置元素 32 q.erase(iter1,iter2); //删除[iter1,iter2)区间内的元素
1 list<int>q; //建立空List 2 list<int>p(5); //建立拥有5个成员的List 3 list<int>s(5,1); //建立拥有5个成员,且初始值为1的List 4 list<int>s2(s); //建立s2,并拷贝s元素给s2 5 list<int>s3(s.begin(),s.end()); //建立s3,拷贝s.begin()至s.end()中元素给s3 6 7 q.back() //返回最后一个元素 8 q.begin() //返回指向第一个元素的迭代器 9 q.clear() //删除全部元素 10 q.empty() //若是list是空的则返回true 11 q.end() //返回末尾的迭代器 12 q.erase() //删除一个元素 13 14 q.front() //返回第一个元素 15 q.get_allocator() //返回list的配置器 16 q.insert() //插入一个元素到list中 17 q.max_size() //返回list能容纳的最大元素数量 18 q.merge() //合并两个list 19 q.pop_back() //删除最后一个元素 20 q.pop_front() //删除第一个元素 21 q.push_front() //在list的头部添加一个元素 22 23 q.rbegin() //返回指向第一个元素的逆向迭代器 24 q.remove() //从list删除元素 25 q.remove_if() //按指定条件删除元素 26 q.rend() //指向list末尾的逆向迭代器 27 q.resize() //改变list的大小 28 q.reverse() //把list的元素倒转 29 q.size() //返回list中的元素个数 30 q.sort() //给list排序 31 q.splice() //合并两个list 32 q.swap() //交换两个list 33 q.unique() //删除list中重复的元素
1 pair<int,int>q; //建立一个空对 2 pair<int,int>p(2,3);//建立一个对p,并分别赋值2,3 3 pair<int,int>s(p); //建立一个对s,拷贝p给s 4 5 //赋值利用make_pair函数 6 q = make_pair(1,2); 7 //访问pair内元素操做 8 q.first; //返回成员第一个数据 9 q.second; //返回成员第二个数据
1 int a[] = {1,2,3,4,5}; 2 set<int>q; 3 set<int>p; 4 5 q.insert(x); //集合中插入元素 6 q.insert(a,a+5); //插入数组a至a+5的元素 7 q.find(x); //返回x值位置的迭代器,找不到返回q.end() 8 q.erase(iter); //删除集合中的元素 9 q.size(); //返回当前set容器中的元素个数 10 q.count(); //返回某个值元素的个数(根据set的特性,就是判断这个元素在不在,返回0或1) 11 q.begin(); //返回头位置迭代器 12 q.end(); //返回尾位置迭代器 13 q.rbegin(); //返回尾部反向迭代器 14 q.rend(); //返回头部反向迭代器 15 q.clear(); //删除set容器中的全部的元素 16 q.empty(); //判断set容器是否为空 17 q.lower_bound(); //返回指向大于(或等于)某值的第一个元素的迭代器 18 q.upper_bound(); //返回大于某个值元素的迭代器
1 struct cmp{ 2 bool operator() (const node &a,const node &b){ 3 return a.x < b.x; 4 } 5 }; 6 7 set<node,cmp>q;
1 map<int,int>q; 2 3 q.insert(pair<int,int>(1,2)); //经过pair进行插入操做 4 q.insert(map<int,int>::value_type (1,2));//经过value_type进行插入 5 q[1] = 2; //用数组方式进行插入 6 /*三者不一样的是,当map存在这个关键字时 7 *数组方式会覆盖关键字的值,而insert操做没法插入。 8 */ 9 10 q.size(); //返回容器内元素个数 11 q.empty(); //判断容器是否为空 12 q.begin(); //返回头位置迭代器 13 q.end(); //返回尾位置迭代器 14 q.rbegin(); //返回尾部反向迭代器 15 q.rend(); //返回头部反向迭代器 16 q.find(key); //查找并返回关键字key的位置 17 q.count(key); //查询是否有关键字key(有则返回1,不然0) 18 q.lower_bound();//返回键值>=给定元素的第一个位置 19 q.upper_bound();//返回键值>给定元素的第一个位置 20 q.erase(iter); //删除迭代器iter的元素 21 q.erase(iter1,iter2);//删除[iter1,iter2)区间内的元素 22 q.erase(key); //删除关键字为key的元素 23 q.clear(); //清空容器 24 q.swap(p); //交换两个map 25 q.key_comp(); //返回比较元素key的函数 26 q.max_size(); //返回能够容纳的最大元素个数 27 q.value_comp(); //返回比较元素value的函数 28 q.equal_range();//返回特殊条目的迭代器对
1 class sort{ 2 3 public: 4 bool operator() (node const &a,node const &b) const{ 5 return a.x < b.x; 6 } 7 8 };
原本想讲BitSet,可是以为bitset比较特殊,到时候专门详细讲吧。node
其实全部容器都挺简单的,根据特性基本都能想出操做。熟悉了这些容器以后,对作题和学习颇有帮助的。数组
记住操做没啥用,得不断的练习使用这些容器 ,才能熟练操做。less
emmmm都说的很简陋,原本想讲每一个容器的具体实现一块儿构造方式。后来一想,篇幅太长了,还容易误导别人以为容器很复杂。这些都算是学个表面吧,最重要的仍是不断敲敲敲,熟悉各类用法。函数
大体就这样吧 =7=学习
后续:Stack,Queue,Pair并非C++的标准容器,可是我以为性质差很少,就一块儿讲了,可是防止误导初学者,这里仍是提一下。spa