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迭代器,每次需要的时候计算尾后迭代器;
- C++ Primer 5e chapter 9.1
- C++ Primer 5e chapter 5
- C++ Primer 5e chapter 1
- C++ Primer 5e chapter 2
- C++ Primer 5e chapter 3
- C++ Primer 5e chapter 4
- C++ Primer 5e chapter 6
- C++ Primer 5e chapter 7
- C++ Primer 5e chapter 8
- C++ Primer 5e chapter 9.2
- C++ Primer 5e chapter 10.1
- C++ Primer 5e chapter 10.2
- C++ Primer 5e chapter 11
- C++ Primer 5e chapter 12
- C++ Primer 5e chapter 13.1
- C++ Primer 5e chapter 13.2
- C++ Primer 5e chapter 14.1
- C++ Primer 5e chapter 14.2
- [IOS]CoreAnimation基础[翻译3部分]
- JAVA2游戏编程——Applet例子
- 一份关于Swift语言学习资源的整理文件
- 黑马程序员--集合
- tomcat绿色部署
- C++ Primer 5e chapter 9.1
- Java中Thread的方法与对应的状态示意图
- Solr不区分大小写
- 黑盒测试和白盒测试区别
- POJ 2348 Euclid's Game (博弈找规律 )
- CentOS 打开mysql 3306端口
- centos如何给用户提权到root
- Unity3D 调用Android的提供的接口
- 浅谈C语言中的联合体