C++ Primer 随笔 Chapter 9 顺序容器
参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html
1.。顺序容器:vector(快速随机访问);list(快速插入删除);deque(双端队列)
2.顺序容器适配器:stack 后进后出,栈;queue 后进先出,队列;priority_queue 优先队列
3. 初始化:
a. C<T> c: 创建名为c的空容器,适用于所有容器
b. C c(c2): 创建容器c2的副本,要求c与c2有相同的容器类型且容器内的元素类型也相同,适用于所有容器
c. C c(b,e): 迭代器b和e的范围内的副本,适用于所有容器
d. C c(n,t): 用n个值为t的元素初始化c容器,只适用于顺序容器
e. C c(n): 用n个值初始化元素的容器c,只适用于顺序容器
f. 容器的容器: vector< vector<string> (这里一定要有个空格,否则就成了移位符>>了) >
4.迭代器操作
a.*iter:取值
b.->:解引用,it->mem等效于(*it).mem
c.++ --
d.== !=
e.以下操作只适用于vector和deque容器
(1). iter +/- n
(2). iter +/-=n
(3). iter1-iter2
(4). >,>=,<,<=
5.容器定义类型别名:
a.size_type 长度
b.iterator, const_iterator,reverse_iterator,const_reverse_iterator 顺序、只读顺序、逆序、只读逆序迭代器
c.difference_type 迭代器差值
d.value_type 元素类型
e.reference 元素类型左值类型,相当于 value_type &
f.const_reference 常量左值,即const_value_type &
6.容器操作
a.begin() end() rbegin() rend():如果容器是const,则返回const_iterator
b.添加元素
(1). push_back(t): 在容器c的尾部添加值为t的元素,返回void类型
(2). push_front(t): 在容器c的前端添加值为t的元素,返回void类型,只适用于list和deque容器
(3). insert(p,t): 在迭代器p所指向的元素前面插入值为t的新元素,返回所指向新添加元素的迭代器
(4). insert(p,n,t): 在迭代器p所指向的元素之前插入n个值为t的新元素,返回void类型
(5). insert(p,b,e): 在迭代器p所指向的元素前面插入由迭代器b和e标记的范围内的元素。返回void类型
c.大小操作
(1). c.size() 返回容器c中的元素个数,返回类型为 c::size_type
(2). c.max_size() 返回容器c可以容纳的最多元素个数,返回类型为 c::size_type
(3). c.empty() 返回标记容器大小是否为0的布尔值
(4). c.resize(n) 调整容器大小为n,如果n小于原来的size则删除多出来的元素,否则,添加采用值初始化新的元素
(5). 调整容器的大小,时期能容纳n个元素,所有新添加的元素值都为t
d.访问元素
(1). c.back() 返回容器c的最后一个元素的引用,如果c为空则该操作未定义
(2). c.front() 返回容器c的第一个元素的引用,如果c为空则该操作未定义
(3). c[n],c.at(n)返回下标为n的元素的引用。如果下标越界,则该操作未定义
f.删除操作
(1) c.erase(p) 删除迭代器p所指向的元素,返回一个迭代器指向被删除元素的后面元素;如果p本身就是指向容器内的最后一个元素,则返回的迭代器指向容器超出末端的下一个位置。如果p本身就是指向超出末端的下一个位置的迭代器,则该函数未定义
(2) c.erase(b,e) 删除迭代器b和e所标记范围内的所有元素,返回一个迭代器,只想被删除元素段后面的元素。如果e本身就是指向超出末端的下一个位置的迭代器, 则返回迭代器也指向容器的超出末端的下一个位置
(3) c.clear() 删除容器c内的所有元素,返回void
(4) c.pop_back() 删除容器c的最后一个元素,返回void。如果c为空容器,则该操作未定义
(5) c,pop_front() 删除容器c的第一元素,返回void。如果c为空容器,则该操作未定义,只适用于list和deque容器
(6) 删除操作回事迭代器失效
e.赋值与swap
(1). c1 = c2 删除c1容器的所有元素,然后将c2原来的元素赋值给c1.c1和c2类型(包括容器类型和元素类型)必须相同
(2). c1.swap(c2) 交换内容:调用玩该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1和c2的类型必须相同
(3). c.assign(b,e) 重新设置c的元素:将迭代器b和e标记的发内内所有的元素复制到c中。b和e必须不是只想c中元素的迭代器
(4). c.assign(n,t) 将容器c重新设置为存储n个值为t的元素
7.vector的自增长
a.capacity和reserve
b.size值是当前的大小,capacity则指必须分配新存储空间之前可以存储的元素总数
c.capacity>=size
8. 容器选用(一般vector都是最佳的选择)
a.随机访问:vector或deque
b.中间插入或删除:list
c.首尾插入或删除
d.在读取时在中间插入,然后需要随机访问,可选用list,然后复制复制给一个vector
9.再谈string
a.构造string的其他办法
(1). string s(cp,n)初始化为cp的前n位副本
(2). string s(s2,pos2)创建s2从下标pos2开始的字符副本,如果pos2>s2.size(),此操作未定义
(3). string s(s2,pos2,len2) 创建s2从下标pos2开始长度为len2的副本
b.修改string的其他方法
(1) s.insert(pos,n,c)在下标为pos的元素之前插入n个字符c
(2) s.insert(pos,s2)在下标为pos的元素之前插入string对象s2的副本
(3) s.insert(pos,s2,pos2,len) 在下标为pos的元素之前插入s2中从下标pos2开始的len个字符
(4) s.insert(pos,cp,len)在下标为pos元素之前插入cp所指向数组的前len个字符
(5) s.insert(pos,cp)在下标为pos的元素之前插入cp所指向的以空字符结束的字符串副本
(6) s.assign(s2)用s2的副本替换s
(7) s.assign(s2,pos2,len) 用s2中从下标pos2开始的len个字符串副本替换s
(8) s.assign(cp,len)用cp所指向数组的前len个字符副本替换s
(9) s.assign(cp) 用cp所指向的以空字符结束的字符串副本替换s
(10) s.erase(pos,len) 删除从下标pos开始的len个字符
注:上述操作除特殊申明,返回的都是s的引用
c.只使用于string类型的操作
(1) s.substr(pos,n) 返回一个string类型的字符串,它包含s中从下表pos开始的n个字符
(2) s.substr(pos) 返回一个string类型的字符串,它包含从下标开始到s末尾的所有字符
(3) s.substr 返回s的副本
(4) s.append(args)
(5) s.replace(pos,len,args) 删除s中从下标pos开始的len个字符,用args制定字符替换之。返回s的引用。
(6) s.replace(b,e,args) 删除迭代器b和e标记的范围内所有的字符,用args替换之,返回s的引用
(7) args说明:
s2 :字符串s2
s2,pos2,len2 :字符串s2中从下标pos2开始的len2字符
cp :指针cp指向的以空字符结束的数组
cp,len2:cp所指向的以空字符结束的数组中前len2个字符
n,c:字符c的n个副本
b2,e2迭代器b2和e2标记的范围内所有字符
d.string类型的查找操作,返回类型为size_type
(1) find(args) 在s中查找args的第一次出现
(2) rfind(args) 在s中查找args的最后一次出现
(3) find_first_of(args) 在s中查找args的任意字符的第一次出现
(4) find_last_of(args) 在s中查找args的任意字符的最后一次出现
(5) find_first_not_of(args) 在s中查找第一个不属于args的字符
(6) find_last_not_of(args) 在s中查找最后一个不属于args的字符
(7) args说明:
c,pos:在s中下标pos标记的位置开始,查找字符c。pos的默认值为0
s2,pos:在s中,从下表pos标记的位置开始,查找string对象s2.pos的默认值为0
cp,pos在s中,从次啊表pos标记的位置开始,查找指针cp所指向的c风格的以空字符结束的字符串,pos的默认值为0
cp,pos,n:在s中:从下标pos标记的位置开始,查找指针cp所指向数组的前n个字符。pos和n都没有默认值
(8) string 上的操作区分大小写
e. string比较操作:compare函数
(1) s.compare(s2) 比较s和s2
(2) s.compare(pos1,n1,s2)让s中从pos下标开始的n1个字符与s2进行比较
(3) s.compare(ps1,n1,s2,pos2,n2) 让s中pos1下标位置开始的n1个字符与s2中从pos2下标位置开始的n2个字符作比较
(4) s.compare(cp) 比较s和cp所指向的以空字符结束的字符串
(5) s.compare(pos1,n1,cp) 参考(2)
(6) s.compare(pos1,n1,cp,n2) 参考(3)
10. 容器适配器:
a. 将一个顺序容器指定为适配器的第二个类型实参,可覆盖默认基础容器,e.g. stack< string, vector<string> > str_stk;
b.栈适配器
(1) empty() 如果栈为空,则返回true,否则返回false
(2) size() 返回栈中元素的个数
(3) pop() 删除栈顶元素,但不返回其值
(4) top() 返回栈顶元素但不删除钙元素
(5) push(item) 在栈顶压入元素
c.队列
(1) empty() 同栈
(2) size() 同栈
(3) pop():删除队首
(4) front():返回队首,不删除
(5) back():返回队尾,不删除
(6) push(item),队尾插入
d.优先队列
(1) empty() 同队列
(2) size(): 同队列
(3) pop(): 同队列
(4) top(): 返回最高优先级的元素
(5) push(item):基于优先级在适当位置插入新元素
C++ Primer 随笔 Chapter 9 顺序容器的更多相关文章
- C++ Primer 随笔 Chapter 10 关联容器
1.关联容器的类型:map(键-值对的集合,可理解为关联数组), set(单纯的键的集合), multimap(一个键对应多个值,键唯一), multiset(相同键可以是多个). 2.pair类型提 ...
- C++ Primer 随笔 Chapter 13 复制控制
1.复制控制包含的内容:复制构造函数.赋值操作符.析构函数 2.复制构造函数: a. 定义:只有单个形参,而且该形参是对本类类型的引用,这样的构造函数被成为复制构造函数 b. 适用情况: (1)根据一 ...
- [C++ Primer] 第9章: 顺序容器
顺序容器概述 顺序容器的类型有: 类型 说明 vector 可变长度数组. 支持快速随机访问. deque 双端队列. 支持快速随机访问. list 双向链表. 只支持双向顺序访问. forward_ ...
- 细嚼慢咽C++primer(5)——顺序容器
1 顺序容器的定义 容器是容纳特定类型对象的集合. 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器. 标准库的三种顺序容器类型:vector, list 和 ...
- C++ Primer 随笔 Chapter 4 数组和指针
1.数组:数组是由类型名.标识符和维数组成的符合数据类型,类型名规定了存放在数组中的元素类型,维数规定数组中包含元素的个数而标识符就是数组的名称.例如: int arr[10]; 其中 int 是类 ...
- C++ Primer 随笔 Chapter 2 变量和基本类型
2.1C++内置类型 C++ 算术类型 类型 含义 最小存储空间(随机器不同而不同) bool 布尔型 --- char 字符型 8位 wchar_t 宽字符型 16位 short 短整型 16位 i ...
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...
随机推荐
- windows下eclipse+hadoop2
windows下eclipse+hadoop2.4开发手册 1.解压下载的hadoop2.4,到任意盘符,例如D:\hadoop-2.4.0. 2.设置环境变量 ①新建系统变量,如下所示. ②将新建的 ...
- oracle行列转换总结-转载自ITPUB
原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希 ...
- healthkit 记录每天用户的运动情况
//详细操作步骤 http://www.csdn.net/article/2015-01-23/2823686-healthkit-tutorial-with-swift //官方api https: ...
- Bridge 模式
Bridge 模式将抽象和行为划分开来,各自独立,但能动态的结合.在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是 ...
- SGU 133.Border
水题不说了 #include <iostream> #include <cstring> #include <cstdio> #include <cmath& ...
- javascript--自己用的插件
/** * Created by Administrator on 2015/4/2. * 时间:2012-6-6 作用:一对form标签下有多个(包括一个)表单需要提交时,提交当前作用域中的表单项做 ...
- 常见ORACLE错误,及解决方案(遇则即时更新)
1.当登陆时提示“ORA-03113:通信通道的文件结束”时: 解决方案: 需在X:\oraclexe\app\oracle\product\10 ...
- aix7安装was7、打补丁、更改访问端口、手动启动was、配置was7、部署项目
1:准备工作 首先了解下我们下面即将用到的aix命令,以及安装包.补丁安装工具.补丁 was7的安装包以及补丁工具都是压缩包形式并且以.tar.gz结尾的 安装包在800MB左右,通常为****_w ...
- php微信支付接口开发程序
php微信支付接口开发程序讲解 微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了, 下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考. ...
- python中归并排序
# coding=UTF-8 #!/usr/bin/python import sys def merge(nums, first, middle, last): "merge" ...