C++ Primer 5e chapter 9.1

来源:互联网 发布:深圳乐易网络是坑吗 编辑:程序博客网 时间:2024/06/05 02:07

1、容器包括:顺序容器,存储的是元素的值,访问元素使用位置即索引、关联容器(有序,无序),使用key-value;

2、顺序容器:vector可变数组  deque双端队列 list双向链表 forward_list单向链表  array固定大小数组  string 字符串;

3、其中vector 和 string 是内存连续存储的,提供快速访问下标操作,但是中间插入和删除比较耗时,list和forward_list添加和删除比较容易,但是不支持元素的随机访问,为了访问元素,需要遍历链表,同时,由于要存内存指针,所以内存占用也大一些;deque是一个复杂的数据结构,支持随机访问,中间添加和删除元素代价比较高,但是在两端删除和添加元素很快。

4、容器操作,别名(iterator const_iterator size_type difference_type value_type reference const_reference),size、empty、max_size方法,获取迭代器,获取反向迭代器;

5、begin和end返回的迭代器,左开右闭区间,begin为起始位置,end为尾后位置,成为范围迭代器,是标准库的基础,while(begin!= end){ ++begin;}

6、一般来说,用一个容器去拷贝初始化另一个容器时,可以提供范围迭代器完成同样功能,使用容器本身的时候要求容器类型和元素类型务必相同,使用迭代器范围的时候要求会宽松一些;

7、C++11 支持的列表初始化,list<string> x = {"a","sfd"};,一般顺序容器支持带有容器大小的参数的构造函数;

8、array数组的初始化有一些不一样,array<int ,10>才是正解,不想内置数组,这个array支持赋值操作符;

9、seq.assign函数 (b,e)(n, t ),seq中的元素替换为迭代器范围b,e之间的元素,n个值为t的元素;

10、swap(a,b) 效率很高,不是拷贝互换,而是改变指针,常数时间;但是对array则是逐个拷贝;

11、顺序容器支持的操作:push_back emplace_back  push_front emplace_front  insert(p,t) (p,n, t)(p,a,b) 插入在p指向元素之前,emplace(p,args),添加元素会使迭代器失效;

12、插入:insert返回值是第一个添加元素的迭代器;

13、插入:C++11 emplace函数,构造而不是拷贝;

14、访问:back和front函数,返回尾元素或者首元素的引用;

15、删除:pop_back ,pop_front,erase(p),erase(a,b) clear();erase返回删除元素之后的元素,若p为尾元素,则返回尾后迭代器;删除元素的存在性,需要程序员确保;

16、forward_list的删除或添加操作有所不同,P313;

17、迭代器失效问题:添加元素,vector和string,看存储空间是否重新分配,如果没有重新分配,则插入之前的迭代器有效;deque,首尾位置插入不影响;list和forward_list均有效;

18、迭代器失效问题:删除元素,list和forward_list,有效;deque,首尾之外,全部失效,尾元素,则尾后失效,首先素,则不影响;vector和string,删除之前的有效,另外,尾后迭代器总会失效;

19、安全有效的操作方式,是不保存end迭代器,每次需要的时候计算尾后迭代器;



0 0
原创粉丝点击