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

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

在这些要求中有这样一条:如果c是一个T类型对象的容器,且c支持operator[],
那么以下代码必须能够编译:
T *p = &c[0]; // 无论operator[]返回什么,
// 都可以用这个地址初始化一个T*
换句话说,如果你使用operator[]来得到Container<T>中的一个T对象,你可以通过取它的地址而获得指向那
个对象的指针。(假设T没有倔强地重载一些操作符。)然而如果vector<bool>是一个容器,这段代码必须能
够编译:
vector<bool> v;
bool *pb = &v[0]; // 用vector<bool>::operator[]返回的
// 东西的地址初始化一个bool*

无法通过编译。

vector<bool>的替代品:deque<bool>,bitset;

时间: 2024-11-03 05:28:51

effective stl 条款18:避免使用vector<bool>的相关文章

effective c++ 条款18 make interface easy to use correctly and hard to use incorrectly

举一个容易犯错的例子 class Date { private: int month; int day; int year; public: Date(int month,int day,int year) { this->month = month; ... } } //wrong example Date date(30,3,1995);//should be 3,30 Date date(2,30,1995);//should be 3,30 使用类型可避免这个问题 class Month

Effective STL 条款1:仔细选择你的容器

条款1:仔细选择你的容器 了解各种容器的实现方法,知道各种容器的内存管理方式.各种操作所对应的底层操作,然后根据需要选择恰当的容器. 对于容器的分类: 标准STL序列容器:vector,string,deque和list 标准STL关联容器:set,multiset,map和multimap 非标准序列容器:slist(单向链表)和rope(重型字符串--不懂) 非标准关联容器:hash_set,hash_multiset,hush_map和hash_multimap vector == str

Effective STL 条款3

确保容器中的对象拷贝正确而高效 在使用STL模板的时候,我们必须想到有关拷贝的问题.如果STL中存储的是我们自定义类型.可能会发生以下几个问题: 首先 为了避免拷贝过程成为程序运转的瓶颈,我们选择存储自定义的指针.但是,这里容易出现野指针的问题,所以我们需要使用智能指针shared_pre来避免. 接着 如果存储类型为基类,此时我们存储派生类,则会发生截断现象,即只copy了基类部分,而派生类部分丢失. 最后 相对于数组来说,vector有它独到的有点,最明显的就是长度的动态增长.

effective stl 条款15 小心string实现的多样性

实际上每个string实现都容纳了下面的信息: ● 字符串的大小,也就是它包含的字符的数目. ● 容纳字符串字符的内存容量.(字符串大小和容量之间差别的回顾,参见条款14.) ● 这个字符串的值,也就是,构成这个字符串的字符 另外,一个string可能容纳 ● 它的配置器的拷贝.对于为什么这个域是可选的解释,转向条款10并阅读关于这个古怪的管理分配器的规则.依赖引用计数的string实现也包含了 ● 这个值的引用计数 ● string对象的大小可能从1到至少7倍char*指针的大小.● 新字符串

Effective C++ 条款18

让接口容易被正确使用,不容易被误用 如题目,我们自己的程序接口是面向用户的,程序的目的不但是解决问题,而且要让用户容易使用,所以,必须保证我们的程序接口具有很强的鲁棒性. 怎么保证接口的鲁棒性,不同情况有不同的处理结果,作者列出了以下几个例子所对应的方法. 1.设计一个class来表示日期 class Date{ public: void Date(int month, int day, int year); -- }; 以上的构造接口很容易被用户用错 Date d(30, 3, 1995);/

Effective STL 中文版(大全)

Effective STL 中文版(大全) 作者:winter 候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL.Effective STL是一本非常好的书,帮助你更好的理解STL,其作者就是<Effective C++>一书的作者.如果你已经初步了解了STL的容器.迭代器.算法和函数,而又想更好的了解STL,那么<Effective STL>是你的最佳选择. 还有一部分没有找到链接,如果再找不到我会自己试着翻译一下:) 前言 容器 条款1

Effective STL -- vector和string

13.vector和string优先于动态分配的数组 使用vector和string和数组相比,减少了管理内存的工作量. 可以使用begin,end,size等函数 vector和string拥有iterator,value_type等类型定义. 注意事项: string可能使用引用计数,在多线程环境下同步可能会导致性能变差. 14.使用reserve来避免不必要的内存分配 vector超过容量后会导致删除原来容器的对象,进行析构操作,扩大内存后会对原来数据对象复制构造,降低性能. 15.注意s

C++学习书籍推荐《Effective STL(英文)》下载

百度云及其他网盘下载地址:点我 作者简介 Scott Meyers is one of the world's foremost authorities on C++, providing training and consulting services to clients worldwide. He is the author of the best-selling Effective C++ series of books (Effective C++, More Effective C+

Effective C++:条款18:让接口容易被正确使用,不易被误用

(一) 看下面这个例子: class Date { public: Date(int month, int day, int year); }; 很有可能引起下面这两个错误: (1)他们也许会以错误的次序传递参数,如:Date d(30, 3, 1995); (2)他们可能传递一个无效的月份或天数,如:Date d(2, 30, 1995); 许多像这类客户端错误. 解决方法:简单的外覆(wrapper types)类型来区别天数.月份.和年份,然后于Date构造函数中使用这些类型: struc