c++primer第九章小结2-9

100 篇文章 8 订阅

转载自http://www.cnblogs.com/crazyant/archive/2011/06/04/2072852.html

这篇文章总结了顺序容器的各种常见操作函数。因为是是第四版,所以和最新的c++标准还是有些不同,但大部分的还是使用的。


C++ Primer 4th 第九章 顺序容器

      

9-1 顺序容器类型

顺序容器

vector

支持快速随机访问

list

支持快速插入/删除

deque

双端队列

顺序容器适配器

stack

后进先出 (LIFO) 

queue

先进先出 (FIFO) 队列

priority_queue

有优先级管理的队列

 

9-2 容器构造函数

C<T> c;

创建一个名为c的空容器。C是容器类型名,如vectorT是元素类型,如intstring

适用于所有容器

C c(c2);

创建容器c2的副本ccc2必须具有相同的容器类型,并存放相同的元素。适用于所有容器

C c(b, e);

创建c,其元素是迭代器be标示的范围内元素的副本。适用于所有容器

C c(n, t);

n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值

只适用于顺序容器

C c(n);

穿件有n个值初始化 (value-initialized) 元素的容器c

只适用于顺序容器

 

9-3 常用迭代器运算

*iter

返回迭代器iter所指向的元素的引用

iter->mem

iter进行解引用,获取指定元素中名为mem的成员。等效于(*iter).mem

++iter

iter1,使其指向容器里的下一个元素

iter++

--iter

iter1,使其指向容器里的前一个元素

iter--

iter1 == iter2

比较两个迭代器是否相等(不等)。当两个迭代器指向同一容器中的同一个元素,或者当它们都指向同一个容器的超出末端的下一位置时,两个迭代器相等

iter1 != iter2

 

9-4 vectordeque类型迭代器支持的操作

iter + n

在迭代器上加(减)整数值n 将产生指向容器中前面(后面)第n个元素的迭代器。新计算出来的迭代器必须指向容器中的元素或超出容器末端的下一元素

iter – n

iter1 += iter2

这是迭代器加减法的符合赋值运算:将iter1加上或减去iter2的运算结果赋给iter1

iter1 -= iter2

iter1 – iter2

两个迭代器的减法,其运算结果加上左边的迭代器即得左边的迭代器。这两个迭代器必须指向同一个容器中的元素或超出元素末端的下一位置

只适用于vectordeque容器

>, >=, <, <=

迭代器的关系操作符。当一个迭代器指向的元素在容器中位于另一个迭代器指向的元素之前,则前一个迭代器小于后一个迭代器。关系操作符的两个迭代器必须指向同一个容器中的元素或超出容器末端的下一位置

只适用于vectordeque容器

 

9-5 容器定义的类型别名

size_type

无符号整型,足以存储此容器类型的最大可能容器长度

iterator

此容器类型的迭代器类型

const_iterator

元素的只读迭代器类型

reverse_iterator

按逆序寻址元素的迭代器

const_reverse_iterator

元素的只读(不能写)逆序迭代器

difference_type

足够存储两个迭代器差值的有符号整型,可为负数

value_type

元素类型

reference

元素的左值类型,是value_type&的同义词

const_reference

元素的常量左值类型,等效于const value_type&

 

9-6 容器的beginend操作

c.begin()

返回一个迭代器,它指向容器c的第一个元素

c.end()

返回一个迭代器,它指向容器c的最后一个元素的下一个位置

c.rbegin()

返回一个逆序迭代器,它指向容器c的最后一个元素

c.rend()

返回一个逆序迭代器,它指向容器c的第一个元素前面的位置

 

9-7 在顺序容器中添加元素的操作

c.push_back(t)

在容器c的尾部添加值为t的元素。返回void类型

c.push_front(t)

在容器c的前端添加值为t的元素。返回void类型

只适用于listdeque容器类型

c.insert(p,t)

在迭代器p所指向的元素前面插入值为t的新元素。返回指向新添加元素的迭代器。

c.insert(p, n, t)

在迭代器p所指向的元素前面插入n个值为t的新元素。返回void类型

c.insert(p, b, e)

在迭代器p所指向的元素前面插入由迭代器be标记的范围内的元素。返回void类型

 

9-8 顺序容器的大小操作

c.size()

返回容器c中的元素个数。返回类型为c::size_type

c.max_size()

返回容器c可容纳的最多元素个数。返回类型为c::size_type

c.empty()

返回标记容器大小是否为0的布尔值

c.resize(n)

调整容器c的长度大小,使其能容纳n个元素

如果n<c.size(), 则删除多出来的元素; 否则,添加采用值初始化的新元素

c.resize(n, t)

调整容器c的大小,使其能容纳n个元素。所有新添加的元素之都为t

 

9-9 访问顺序容器内元素的操作

c.back()

返回容器c的最后一个元素的引用。如果c为空,则该操作未定义

c.front()

返回容器c的第一个元素的引用。如果c为空,则该操作未定义

c[n]

返回下标为n的元素的引用

如果n<0n>=c.size(),则该操作未定义

只适用于vectordeque容器

c.at(n)

返回下表为n的元素的引用。如果下标越界,则该操作未定义

只适用于vectordeque容器

 

9-10 删除顺序容器内元素的操作

c.erase(p)

删除迭代器p所指向的元素

返回一个迭代器,它指向被删除元素后面的元素。如果p指向容器内的最后一个元素,则返回的迭代器指向容器的超出末端的下一位置。如果p本身就是指向超出末端的下一位置的迭代器,则该函数未定义

c.erase(b, e)

删除迭代器be所标记的范围内的所有元素

返回一个迭代器,它指向被删除元素段后面的元素。如果e本身就是指向超出末端的下一位置的迭代器,则返回的迭代器也指向容器的超出末端的下一位置

c.clear()

删除容器c内的所有元素。返回void

c.pop_back()

删除容器c的最后一个元素。返回void。如果c为空容器,则该函数未定义

c.pop_front()

删除容器c的第一个元素。返回void。如果c为空容器,则该函数未定义。只适用于listdeque容器

 

9-11 顺序容器的赋值操作

c1 = c2

删除容器c1的所有元素,然后将c2的元素复制给c1c1c2的类型(包括容器类型和元素类型)必须相同

c1.swap(c2)

交换内容:调用完该函数后,c1中存放的是c2原来的元素,c2中存放的则是c1原来的元素。c1c2的类型必须相同。该函数的执行速度通常要比将c2的元素复制到c1的操作快

c.assign(b, e)

重新设置c的元素:将迭代器be标记的范围内所有的元素复制到c中。be必须不是指向c中元素的迭代器

c.assign(n, t)

将容器c重新设置为存储n个值为t的元素

 

9-12 普通的string操作

string s;

定义一个新的空string对象,命名为s

string s(cp);

定义一个新的string对象,用cp所指向的(以空字符null结束的)C风格字符串初始化该对象

string s(s2);

定义一个新的string对象,并将它初始化为s2的副本

is>>s;

从输入流is中读取一个以空白字符分割的字符串,写入s

os<<s;

s写到输出流os

getline(is, s)

从输入流is中读取一行字符,写入s

s1 + s2

s1s2串接起来, 产生一个新的string对象

s1 += s2

s2拼接在s1的后面

关系操作符

相等运算(==和!=)以及关系运算(<<=>>=)都可用于string对象的比较,等效于(区分大小写的)字典次序的比较

 

9-13 构造string对象的其他方法

string s(cp, n)

创建一个string对象,它被初始化为cp所指向数组的前n个元素的副本

string s(s2, pos2)

创建一个string对象,它被初始化为一个已存在的string对象s2中从下表pos2开始的字符的副本

如果pos2 > s2.size(),则该操作未定义

string s(s2, pos2, len2)

创建一个string对象,它被初始化为s2中从下标pos2开始的len2个字符的副本。如果pos2 > s2.size(),则该操作未定义

无论len2的值是多少,最多只能复制s2.sizeZ() – pos2个字符

注意:nlen2pos2都是unsigned

 

9-14 与容器共有的string操作

s.insert(p, t)

在迭代器p指向的元素之前插入一个值为t的新元素。返回指向新插入元素的迭代器

s.insert(p, n, t)

在迭代器p指向的元素之前插入n个值为t的新元素。返回void

s.insert(p, b, e)

在迭代器p指向的元素之前插入迭代器be标记范围内所有的元素。返回void

s.assign(b, e)

用迭代器be标记范围内的元素替换s。对于string类型,该操作返回s;对于容器类型,则返回void

s.assign(n, t)

用值为tn个副本替换s。对于string类型,该操作返回s;对于容器类型,则返回void

s.erase(p)

删除迭代器p指向的元素。返回一个迭代器,指向被删除元素后面的元素

s.erase(b, e)

删除迭代器be标记范围内的所有元素。返回一个迭代器,指向被删除元素段后面的第一个元素

 

9-15 string类型特有的版本

s.insert(pos, n, c)

在下标为pos的元素之前插入n个字符c

s.insert(pos, s2)

在下标为pos的元素之前插入string对象s2的副本

s.insert(pos, s2, pos2, len)

在下标为pos的元素之前插入s2中从下标pos2开始的len个字符

s.insert(pos, cp, len)

在下标为pos的元素之前插入cp所指向数组的前len个字符

s.insert(pos, cp)

在下标为pos的元素之前插入cp所指向的以空字符结束的字符串副本

s.assign(s2)

s2的副本替换s

s.assign(s2, pos2, len)

s2中从下标pos2开始的len个字符副本替换s

s.assign(cp, len)

cp所指向数组的前len个字符副本替换s

s.assign(cp)

cp所指向的以空字符结束的字符串副本替换s

s.erase(pos, len)

删除从下标pos开始的len个字符

除非特殊声明,上述所有操作都返回s的引用

 

9-16 字串操作

s.substr(pos, n)

返回一个string类型的字符串,它包含s中从下标pos开始的n个字符

s.substr(pos)

返回一个string类型的字符串,它包含从下标pos开始到s末尾的所有字符

s.substr()

返回s的副本

 

9-17 修改string对象的操作(args在表9-18中定义)

s.append(args)

args串接在s后面。返回s的引用

s.replace(pos, len, args)

删除s中从下标pos开始的len个字符,用args指定的字符代替之。返回s的应用

在这个版本中,args不能为b2, e2

s.replace(b, e, args)

删除迭代器be标记的范围内所有的字符,用args替换之。返回s的引用

在这个版本中,args不能为s2, pos2, len2

 

9-18 appendreplace操作的参数:args

s2

string类型的字符串s2

s2, pos2, len2

字符串s2中从下标pos2开始的len2个字符

cp

指针cp指向的以空字符结束的数组

cp, len2

cp指向的以空字符结束的数组中前len2个字符

n, c

字符cn个副本

b2, e2

迭代器b2e2标记的范围内所有字符

 

9-19 string类型的查找操作(其参数args在表9-20中定义)

s.find(args)

s中查找args的第一次出现

s.rfind(args)

s中查找args的最后一次出现

s.find_first_of(args)

s中查找args的任意字符的第一次出现

s.find_last_of(args)

s中查找args的任意字符的最后一次出现

s.find_first_not_of(args)

s中查找第一个不属于args的字符

s.find_last_not_of(args)

s中查找最后一个不属于args的字符

 

9-20 string类型提供的find操作的参数

c, pos

s中,从下标pos标记的位置开始,查找字符cpos的默认值为0

s2, pos

s中,从下标pos标记的位置开始,查找string对象s2pos的默认值为0

cp, pos

s中,从下标pos标记的位置开始,查找指针cp所指向的C风格的以空字符结束的字符串。pos的默认值为0

cp, pos, n

s中,从下标pos标记的位置开始,查找指针cp所指向数组的前n个字符。posn都没有默认值

 

9-21 string类型的compare操作

s.compare(s2)

比较ss2

s.compare(pos1, n1, s2)

s中从pos下标位置开始的n1个字符与s2作比较

s.compare(pos1, n1, s2, pos2, n2)

s中从pos1下标位置开始的n1个字符与s2中从pos2下标位置开始的n2个字符作比较

s.compare(cp)

比较scp所指向的以空字符结束的字符串

s.compare(pos1, n1, cp)

s中从pos1下标位置开始的n1个字符与cp所指向的字符串作比较

s.compare(pos1, n1, cp, n2)

s中从pos1下标位置开始的n1个字符与cp所指向字符串的前n2个字符作比较

 

9-22 适配器通用的操作和类型

size_type

一种类型,足以存储此适配器类型最大对象的长度

value_type

元素类型

container_type

基础容器的类型,适配器在此容器类型上实现

A a;

创建一个新的空适配器,命名为a

A a(c);

创建一个名为a的新适配器,初始化为容器c的副本

关系操作符

所有适配器都支持全部关系操作符:==、!=<<=>>=

 

9-23 栈容器适配器支持的操作

s.empty()

如果栈为空,则返回true,否则返回false

s.size()

返回栈中元素的个数

s.pop()

删除栈顶元素,但不返回其值

s.top()

返回栈顶元素的值,但不删除该元素

s.push(item)

在栈顶压入新元素

 

9-24 队列和优先级队列支持的操作

q.empty()

如果队列为空,则返回true,否则返回false

q.size()

返回队列中元素的个数

q.pop()

删除队首元素,但不返回其值

q.front()

返回队首元素的值,但不删除该元素

该操作只适用于队列

q.back()

返回队尾元素的值,但不删除该元素

该操作只适用于队列

q.top()

返回具有最高优先级的元素值,但不删除该元素

该操作只适用于优先级队列

q.push(item)

对于queue,在队尾压入一个新元素

对于priority_queue,在基于优先级的适当位置插入新元素

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值