条款18:避免使用vector<bool>

文章探讨了为什么vector<bool>不满足STL容器的要求,由于它使用位域节省空间,导致无法直接获取bool元素的指针。推荐使用deque或bitset作为替代,deque作为STL容器支持大部分vector功能,而bitset适用于固定大小的位集合操作。
摘要由CSDN通过智能技术生成

一些实验和解释
做为一个STL容器,vector确实只有两个问题。第一,它不是一个STL容器。第二,它并不容纳bool。除此以外,就没有什么要反对的了。

一个东西不能成为STL容器只因为会有人会说它是。一个东西要成为STL容器就必须满足所有在C++标准23.1节中列出的容器必要条件。在这些要求中有这样一条:如果c是一个T类型对象的容器,且c支持operator[],那么以下代码必须能够编译:

T *p = &c[0];   // 无论operator[]返回什么,
    // 都可以用这个地址初始化一个T*

换句话说,如果你使用operator[]来得到Container中的一个T对象,你可以通过取它的地址而获得指向那个对象的指针。(假设T没有倔强地重载一些操作符。)然而如果vector是一个容器,这段代码必须能够编译:

vector<bool> v;
bool *pb = &v[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值