C++标准程序库细节整理(三)第六章
来源:互联网 发布:网络大电影投资合同 编辑:程序博客网 时间:2024/05/21 20:29
1、STL容器的三大核心能力是:(1)所有容器提供的都是“value语意”而非“reference语意”;(2)总体而言,所有元素形成一个次序;(3)一般而言,各项操作并非绝对安全。
2、STL容器类别的共同操作:(见C++标准程序库的第145页)。
3、vector的大小操作:size();capacity();reserve()。vector的操作:构造、拷贝和解构;非变动性操作;赋值操作;元素存取操作。
reserve()从新分配的大小必须大于容器原分配的大小,否则不会起作用。既然vector的容器不会缩减,即使删除元素,其reference、pointers、iterators也会继续有效,继续指向动作发生前的位置。然而安插操作可能使reference、pointers、iterators失效。赋值操作有:assign(n,elem);assign(beg,end);c1.swap(c2);swap(c1,c2)。元素存取操作有:c.at(idx);c[idx];c.front();c.back()。注意:存取操作只有at检查元素是否存在,其他三个不做检查。
4、千万不要把迭代器当做第一元素的地址来传递。vector迭代器是由实作版本定义的,也许并不是一个一般指针。
5、关于vector的一些异常处理:
(1)如果push_back()安插元素时发生异常,该函数不起作用。
(2)如果元素的拷贝操作不抛出异常,那么insert()要么成功,要么不生效用。
(3)pop_back()决不会抛出任何异常。
(4)如果元素拷贝操作不会抛出异常,erase()和clear()就不抛出异常。
(5)swap()不抛出异常。
(6)如果元素拷贝操作绝对不会抛出异常,那么所有操作不是成功,就是不起作用。这类元素可被称为POD。POD泛指那些无C++特性的型别,例如C structure便是。
6、只有在non-const vector<bool>容器中才会用到内部型别reference。取存元素用const member function 会返回型别为bool的普通数值。
7、deques的操作:deques的构造函数和析构函数;deques的非变动性操作;deques的变动性操作。
deques不提供容器操作(capacity()和reserve())。deques直接提供函数,用以完成头部元素的安插和删除。
同vector一样,除了at()外,没有任何成员函数会检查索引或迭代器是否有效。同vector一样,deques的任何插入和删除操作都会使所有指向deques元素的pointers、reference失效,除了特殊情况(头部和尾部)。
8、Lists提供了不少特殊的成员函数,专门用于移动元素。较之同名的STL通用算法,这些函数执行起来更快,因为它们无需拷贝或移动,只需调整若干指针即可。
9、Lists的特殊函数sort()、remove()、remove_if()。另外,Lists还有一些特殊的变动性操作:c.unique();c.unique(op);c1.splice(pos,c2);c1.splice(pos,c2,c2pos);c1.splice(pos,c2beg,c2end);c.sort();c.sort(op);c1.merge(c2);c1.merge(c2,op);c.reverse()。
10、set和multiset有一个重要限制:你不能直接改变元素值,因为这样会打乱原本正确的顺序。因此,要改变元素的值,必须先删除旧元素,再插入新元素。sets、mutisets不提供用来直接存取元素的任何操作函数。通过迭代器进行元素间接存取,有一个限制:从迭代器的角度来看,元素值是常数。
11、set和multiset的特殊搜寻函数:count(elem);find(elem);lower_bound(elem);upper_bound(elem);equal_range(elem)。
12、map、multimap有一条重要的限制:你不可以直接改变元素的key,实际上key是一个const常量。map、multimap的特殊搜寻操作函数同set和setmultiset的。如果要移除map和multimap的元素,你只能使用它们所提供的成员函数。
13、non-const maps提供下表操作符,支持元素的直接存取:m[key]。优点:你可以透过更方便的结构对着map安插新元素。缺点是你可能不小心误置了新元素。如:std::cout<<coll["ottto"]。
- C++标准程序库细节整理(三)第六章
- C++标准程序库细节整理(一)第四章
- C++标准程序库细节整理(二)第五章
- 【C++】《C++标准程序库》小结第六章(容器)
- 【C++】《C++标准程序库》小结第十三章-stream(1)
- 【C++】《C++标准程序库》小结第十三章-stream(2)
- 【C++】《C++标准程序库》小结第十三章-stream(3)
- 《C++标准程序库》读书笔记(三)
- C++标准程序库(学习笔记)三
- C++标准程序库 学习笔记 第六章 容器
- 《C++标准程序库》第六章摘录与笔记
- C标准程序库头文件
- 《C++标准程序库》学习笔记(三)迭代器
- 【C++】《C++标准程序库》重难点分析(一)~(五)章
- 【C++】《C++标准程序库》小结七章-迭代器
- 【C++】《C++标准程序库》小结八章-仿函数
- 【C++】《C++标准程序库》小结第九章-算法
- 【C++】《C++标准程序库》小结第十章-特殊容器
- 【JavaScript】一个同步于本地时间的动态时钟并且自定义时间格式
- ios之NSURLConnection网络请求数据/GET与POST方法
- PowerDesigner学习笔记分享
- ubuntu配置vsftpd
- ACRA(异常处理)
- C++标准程序库细节整理(三)第六章
- java开发常用到的jar包总结
- 长轮询(long-polling)
- Linux 如何挂载、卸载硬盘--以centos系统为例
- 链表的操作
- CleanCode
- lodop打印控件破解思路详解(一)
- C++调用Python(需要安装Python)
- iOS - Your build settings specify a provisioning profile with the UUID, no provisioning profile was