C++常用容器汇总

考试多次可以用到,但有些容器用法根本不熟练或者不知道,故总结一下
序列式容器
vector
1. 创建vector

   vector<int>  v;

   vector<int> v(10);   /指定了大小后可以使用下标操作

2. 基本操作

   v.capacity(); //容器容量

   v.size();   //容器大小

   v.at(int idx); //用法和[]运算符相同

   v.push_back(); //尾部插入

   v.pop_back(); //尾部删除

   v.front();   //获取头部元素

   v.back();   //获取尾部元素

   v.begin();   //头元素的迭代器

   v.end();    //尾部元素的迭代器

   v.insert(pos,elem); //pos是vector的插入元素的位置

   v.insert(pos, n, elem) //在位置pos上插入n个元素elem

   v.insert(pos, begin, end);

   v.erase(pos);  //移除pos位置上的元素,返回下一个数据的位置

   v.erase(begin, end); //移除[begin, end)区间的数据,返回下一个元素的位置

   v.reverse(pos1, pos2); //将vector中的pos1~pos2的元素逆序存储
关联容器
(1) 关联式容器都是有序的,升序排列,自动排序;
(2) 实现的是一个平衡二叉树,每个元素都有一个父节点和两个子节点,
左子树的所有元素都比自己小,右子树的所有元素都比自己大;
set
  1. 创建set
   set<T> s;

   set<T, op(比较结构体)> s;  //op为排序规则

   //使用方法如下

   struct myComp

   {

      bool operator() (const 类型 &a, const 类型 &b)//重载“()”操作符{

   ​         ……

   ​        return ……;}

   };

   // 然后,定义set:

   set<T,myComp> s;
  1. 基本操作
   s.size();   //元素的数目

   s.max_size(); //可容纳的最大元素的数量

   s.empty();   //判断容器是否为空

   s.find(elem); //返回值是迭代器类型

   s.count(elem); //elem的个数,要么是1,要么是0,multiset可以大于一

   s.begin();

   s.end();

   s.rbegin();

   s.rend();

   s.insert(elem);

   s.insert(pos, elem);

   s.insert(begin, end);

   s.erase(pos);

   s.erase(begin,end);

   s.erase(elem);

   s.clear();//清除a中所有元素;
  1. 其他操作
   	// 遍历set

   	for(set<T>::iterator it = s.begin(); it != s.end(); i ++) cout << *it << endl;
   
   	// 倒序遍历

   	for(set<T>::reverse_iterator it = s.rbegin(); it != s.end(); i ++ ) cout << *it << endl;

	// 查找元素
 	s.find(key_value)  //找到返回迭代器位置,未找到返回s.end()
  
pair
  1. 创建pair
   pair<T, T> p;

   make_pair(a, b);  //make_pair内调用的实际还是构造函数
  1. 基本操作
   cout << p.first  << " " << p.second << endl;+
map / multimap
map是单重映射, multimap是多重映射
map存储的是无重复键值的元素对,而multimap允许相同的键值重复出现,既一个键值可以对应多个值。
  1. 创建map
   map<T1,  T2> m;

   map<T1,  T2,  op> m; //op是排序规则默认是 less<T>,这点和set一样 
  1. 基本操作
   m.at(key);

   m[key];   //只适用于map,不适用于multimap

   m.count(key);

   m.max_size(); //求算容器最大存储量

   m.size(); //容器的大小

   m.begin();

   m.end();

   m.insert(elem);

   m.insert(pos, elem);

   m.insert(begin, end);

   m.erase(pos);

   m.erase(begin,end);

   m.erase(key);
  1. 其他操作

    find查找,存在返回迭代器,不存在返回end

    修改键值 先删除原来的再添加新的

    或者直接像数组赋值就行 m[key] = new_value

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值