第二部分——第九章/顺序容器
2012-07-10 19:29
232 查看
1:三种顺序容器 vector list deque(双端队列)
及对应适配器 stack queue priority_queue
初始化除了有默认构造函数外,还有其他容器构造函数,如:C<T> c(c2)复制构造函数 C<T> c(b,e)创建c,其元素是迭代器b和e标本的范围内元素的副本,
C<T> c(n, t)用n个值为t的元素创建容器c C<T> c(n)创建有n个值初始化
2:大多数类型都可作为容器的元素类型,但有两个限制
1) 必须支持赋值运算
2) 该类型对象必须可以复制
例子:引用不支持一般意义的赋值运算;IO库类型不支持赋值和复制,因此也不能创建存放IO类型对象的容器
而容器元素可以是容器类型,但需注意,必须使用空格 vector< vector<string> > lines; 否则>>被当成是移位符
3:通过迭代器访问容器中的元素
只有vector和deque容器提供两种重要的运算集合:迭代器算术运算和除了==以及!=之外的关系操作符对两个迭代器进行比较
迭代器范围,是一个左闭合区间 [beg, end),当beg和end相等时,迭代器范围为空;当不相等时,则迭代器范围内至少有一个元素,beg指向该区间中的第一个元素,并通过若干次自增运算可以使beg值不断增大,直到beg==end为止
使迭代器失效的容器操作:erase()函数,删除容器中的某个元素,任何指向已删除元素的迭代器都具有无效值
4:容器定义的类型别名
1) size_type 无符号整型,足以存储此容器类型的最大可能容器长度
2) iterator 此容器的迭代器类型
3) const_iterator
4) reverse_iterator 按逆序寻址元素的迭代器
5) difference_type 有符号整型
6) value_type 元素类型
5:begin和end成员
1) c.begin() 返回一个迭代器,指向容器c的第一个元素
2) c.end() 指向c最后一个元素的下一位置
3) c.rbegin() 指向第一个元素的前一个位置
4) c.rend() 指向最后一个元素
6:添加元素的操作
1) c.push_back(t)
2) c.push_front(t)
3) c.insert(p, t) 在迭代器p所指向的元素前面插入值为t的新元素,返回新添加元素的迭代器
4) c.insert(p, n, t) -------------------------------------------n个值为t的新元素,返回void类型
5) c.insert(p, b, e)
7:两个容器的比较,容器必须具有相同的容器类型
1) 具有相同的长度并且对应位置的元素相等,则两容器相等
2) 长度不相同,且较短者所有元素都等于较长者对应元素的值,则较短者小于较长者
3) 两容器都不是对方的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素
8:容器大小操作
1) c.size() 返回元素个数,类型为size_type
2) c.max_size() 返回可容纳的最多元素个数
3) c.empty()
4) c.resize(n)
5) c.resize(n, t)
9:访问元素
1) c
只适用于vector和deque容器
2) c.at(n) 只适用于vector和deque容器
3) *iter 通用
10:删除元素
1) c.erase(p)
2) c.erase(b, e)
3) c.clear()
4) c.pop_back()
5) c.pop_front() 只适用于list或deque
11:赋值与swap
1) c1.swap(c2) 两容器交换内容
2) c.assign(b, e) b和e必须不是c的迭代器
3) c.assign(n, t)
12:vector容器的元素是以连续的方式存放,所以添加一个元素,当容器中已经没有空间容纳新的元素,则必须重新分配存储空间,存放在旧存储空间的必须复制到新存储空间中,若每次都要这么分配,则性能非常慢;list是链表存储,则不存在这样的问题
然而,大部分应用中,vector容器都是最好的,vector容器预留了额外的存储区,访问元素的便利弥补了存储代价;capacity() 返回容器在必须分配新存储空间之前可以存储的元素总数
13:只适用于string类型的操作
1) substr(pos, n) 函数 检索需要的子串
2) append() 在字符串末尾添加字符
3) replace() 替换字符串中的内容
14:string类型的查找操作
1) find(args) 查找args的第一次出现
2) rfind(args) ---------------最后一次出现
3) find_first_of(args) 查找args的任意字符的第一次出现
4) find_last_of(args)
5) find_first_not_of(args)
6) find_last_not_of(args)
15:string类型的比较 compare()函数,不同的重载函数;也可以和C风格字符串进行比较
16:容器适配器、迭代器适配器、函数适配器
适配器:使一事物的行为类似于另一事物的行为的一种机制
stack栈可以建立在vector/list/deque容器上;queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list容器上;priority_queue适配器要求提供随机访问功能,因此可建立在vector和deque容器上,不能建立在list上
及对应适配器 stack queue priority_queue
初始化除了有默认构造函数外,还有其他容器构造函数,如:C<T> c(c2)复制构造函数 C<T> c(b,e)创建c,其元素是迭代器b和e标本的范围内元素的副本,
C<T> c(n, t)用n个值为t的元素创建容器c C<T> c(n)创建有n个值初始化
2:大多数类型都可作为容器的元素类型,但有两个限制
1) 必须支持赋值运算
2) 该类型对象必须可以复制
例子:引用不支持一般意义的赋值运算;IO库类型不支持赋值和复制,因此也不能创建存放IO类型对象的容器
而容器元素可以是容器类型,但需注意,必须使用空格 vector< vector<string> > lines; 否则>>被当成是移位符
3:通过迭代器访问容器中的元素
只有vector和deque容器提供两种重要的运算集合:迭代器算术运算和除了==以及!=之外的关系操作符对两个迭代器进行比较
迭代器范围,是一个左闭合区间 [beg, end),当beg和end相等时,迭代器范围为空;当不相等时,则迭代器范围内至少有一个元素,beg指向该区间中的第一个元素,并通过若干次自增运算可以使beg值不断增大,直到beg==end为止
使迭代器失效的容器操作:erase()函数,删除容器中的某个元素,任何指向已删除元素的迭代器都具有无效值
4:容器定义的类型别名
1) size_type 无符号整型,足以存储此容器类型的最大可能容器长度
2) iterator 此容器的迭代器类型
3) const_iterator
4) reverse_iterator 按逆序寻址元素的迭代器
5) difference_type 有符号整型
6) value_type 元素类型
5:begin和end成员
1) c.begin() 返回一个迭代器,指向容器c的第一个元素
2) c.end() 指向c最后一个元素的下一位置
3) c.rbegin() 指向第一个元素的前一个位置
4) c.rend() 指向最后一个元素
6:添加元素的操作
1) c.push_back(t)
2) c.push_front(t)
3) c.insert(p, t) 在迭代器p所指向的元素前面插入值为t的新元素,返回新添加元素的迭代器
4) c.insert(p, n, t) -------------------------------------------n个值为t的新元素,返回void类型
5) c.insert(p, b, e)
7:两个容器的比较,容器必须具有相同的容器类型
1) 具有相同的长度并且对应位置的元素相等,则两容器相等
2) 长度不相同,且较短者所有元素都等于较长者对应元素的值,则较短者小于较长者
3) 两容器都不是对方的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素
8:容器大小操作
1) c.size() 返回元素个数,类型为size_type
2) c.max_size() 返回可容纳的最多元素个数
3) c.empty()
4) c.resize(n)
5) c.resize(n, t)
9:访问元素
1) c
只适用于vector和deque容器
2) c.at(n) 只适用于vector和deque容器
3) *iter 通用
10:删除元素
1) c.erase(p)
2) c.erase(b, e)
3) c.clear()
4) c.pop_back()
5) c.pop_front() 只适用于list或deque
11:赋值与swap
1) c1.swap(c2) 两容器交换内容
2) c.assign(b, e) b和e必须不是c的迭代器
3) c.assign(n, t)
12:vector容器的元素是以连续的方式存放,所以添加一个元素,当容器中已经没有空间容纳新的元素,则必须重新分配存储空间,存放在旧存储空间的必须复制到新存储空间中,若每次都要这么分配,则性能非常慢;list是链表存储,则不存在这样的问题
然而,大部分应用中,vector容器都是最好的,vector容器预留了额外的存储区,访问元素的便利弥补了存储代价;capacity() 返回容器在必须分配新存储空间之前可以存储的元素总数
13:只适用于string类型的操作
1) substr(pos, n) 函数 检索需要的子串
2) append() 在字符串末尾添加字符
3) replace() 替换字符串中的内容
14:string类型的查找操作
1) find(args) 查找args的第一次出现
2) rfind(args) ---------------最后一次出现
3) find_first_of(args) 查找args的任意字符的第一次出现
4) find_last_of(args)
5) find_first_not_of(args)
6) find_last_not_of(args)
15:string类型的比较 compare()函数,不同的重载函数;也可以和C风格字符串进行比较
16:容器适配器、迭代器适配器、函数适配器
适配器:使一事物的行为类似于另一事物的行为的一种机制
stack栈可以建立在vector/list/deque容器上;queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list容器上;priority_queue适配器要求提供随机访问功能,因此可建立在vector和deque容器上,不能建立在list上
相关文章推荐
- C++学习笔记【第二部分第九章:顺序容器】
- 第二部分<容器和算法>--顺序容器
- (第二部分)容器和算法——顺序容器
- Flex之旅:第二部分:容器与布局(1)---容器的初始化顺序
- 《C++ Primer》读书笔记第九章-1- 顺序容器概述 And 容器库概览
- C++ Primer 4 第九章 顺序容器
- 顺序容器部分习题(基础)
- 《视频解密》中文版(第四版)第九章NTSC和PAL数字编码和解码(第二部分)
- Atitit 算法之道 attilax著 1. 第二部分(Part II) 排序与顺序统计(Sorting and Order Statistics) 1 2. 第六章 堆排序(Heapsort)
- Primer STL笔记第二部分容器与算法
- 第九章 顺序容器
- 第二部分 第九章 文件的压缩与打包
- c++ primer (5th) 第九章,顺序容器
- 第二部分 排序与顺序统计
- C++primer第4版第九章顺序容器
- 《C++ Primer》读书笔记-第九章 03 顺序容器操作
- 第九章 顺序容器
- 第九章 顺序容器(上)
- 第九章 顺序容器(下)
- <C++Primer>第四版 阅读笔记 第二部分 “容器和算法”