一些特殊容器:string,bitset,vector<bool>,空容器

@ std::string:是类模板std::basic_string的一个元素类型为char的实例化,而basic_string则是对元素指针的封装。

@ bitset:不是std::set的特化,也不是容器,是一个以数据值为参数的类模板。常用来设计由许多标志位组合而成的变量,如掩码及其运算等。bitset的底层存储结构如下图:


bitset不是容器,所以长度一旦确定就不能改变,也不支持插入、删除操作,没有迭代器,只有reference。但其支持随机访问,并提供了丰富的位操作方法。

@ vector<bool> 通过把用户指定的bool值位数折合成由若干个无符号整数(WORD)组成的vector来节约存储空间。vector<bool>中的元素并非C++的bool变量(byte),而是一个bit.其存储结构如下图:


可以把一个bool变量指派给vector<bool>的任一个元素,同样也可以把任一个元素转换成bool变量。vector<bool>是一个真正的容器,可以动态插入、删除元素,会重新分配内存,存在迭代器失效等问题,但没有bitset丰富的位操作。其迭代器属于随机访问迭代器,因此,可以随机访问其中任何一个bool值。

@ 空容器,对空容器进行某些操作可能会差生错误,如果无法确定容器是否为空,可以首先使用empty()来检查。

     从容器中删除一个本不属于它的元素和从空容器中删除元素一样危险。所以,从容器中删除元素前一定要检查该元素是否属于该容器:

      & 在顺序容器中,一个元素是否属于该容器要看它的内存空间是否属于该容器所有,而不是看元素对象的值。因此只能通过指定位置(迭代器)来删除元素,此时它不用检查指定的元素是否属于自己。如果你指定的对象不属于该容器,删除会抛出异常;

     & 关联式容器通过值来定位元素对象,因此通过指定值来删除元素的时候,容器会检查该值是否与自己的某一个元素对象匹配,如果知道则删除与该值相等的所有元素对象,反之简单返回。(也可以通过指定位置来删除元素,但其结果与从顺序容器中删除元素是一样的)







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值