Accelerated C++:5 使用顺序容器并分析字符串

容器

c.begin() c.end():指向容器第一个元素和紧跟在最后一个元素之后的那个位置的迭代器
c.rbegin() c.rend():对于允许以逆序访问其元素的容器,表示的是指向容器最后一个元素和位于第一个元素之前的那个位置的选代器。
container<i> c;
container<T> c(c2);: 定义一个容器c。如果给定c2,那么cc2的一个复件;否则c为空。
contanier<T> c(n);:定义一个有n个元素的容器cc根据T的类型而被数值初始化。如果T是一个类类型,那么这个类型将控制元素的初始化方式。如果T是一个内部算术类型,那么元素将被初始化成0
contanier<T> c(n,t);:定义一个有n个元素的容器cc的元素是t的复件:
contanier<T> c(b,e);:创建一个容器,这个容器保存了位于区间[b,e)中的迭代器所指示元素的一个复件。
c=c2;:用容器c2的一个复件来替换容器c的内容。
c.size():返回c的元素个数,返回值的类型是 size_type
c.empty():一个判定,被用来指示c是否没有元素。
c.insert(d,b,e):复制由位于区间[b,e)中的迭代器所指示的元素,并且把它们插入到c中位于d之前的位置中。
c.erase(it) c.erase(b,e):从容器c中删除由it指示或由[b,e)指示的元素。对于list,这个操作是快速的;但对于vectorstring则可能比较慢。
c.push back(t):在c的末尾添加一个元素,这个元素的值是t

  • 支持随机访问的容器和string类型同时也提供了如下的操作:
    c[n]:从容器c中取出位于位置n的字符。

迭代器

一个迭代器(iterator)是一个值,它能够

  • 识别一个容器以及一个容器中的一个元素
  • 让我们检查存储在这个元素中的值
  • 提供操作来移动在容器中的元素
  • 采用对应于容器所能够有效处理的方式来对可用的操作进行约束
    迭代器的行为与索引相似,用迭代器来代替索引。

迭代器类型

每一个标准容器,都定义了两种相关的迭代器类型:

container-type::const_iterator
container-type::iterator

container-type是容器的类型,包括容器元素的类型。
用迭代器来修改存储在容器中的值,使用iterator类型;仅需要读操作,使用const_iterator类型。


可以把一个iterator类型的对象转换为const_iterator类型,但反过来不行。


container<T>::sizetype:类型名称,保存这个容器可能存在的最大实例的长度。

迭代器的操作

定义一个迭代器之后,将值设为beginbeginend函数返回一个值,指示一个容器的开头或指示紧接着在容器最后一个元素后面的那个位置。

  • begin返回一个类型为container-type::iterator的迭代器,指向容器的第一个元素。
  • end返回一个类型为container-type::iterator的迭代器,指向容器最后一个元素后面的第一个位置。
  • 循环中存在删除操作,则不变式使用size()而非end()

== !=比较两个迭代器(不管其类型有无const)是否相等。


++iterator iterator++增量运算符,为迭代器类型重载,把迭代器推进到容器的下一个元素。


*iterator间接引用运算符,访问元素,用于迭代器返回一个迭代器指向元素的左值。

  • *的优先级比.低,与++--相同,使用(*iterator).name获取类对象的一个成员
  • iterator->name与上述等价,优先级与.相同。

+iterator.begin() + i 迭代器和索引的类型决定表达式中+的意义。
若容器不支持随机访问索引的操作,那么无法定义+的类型,将禁止对它的元素的随机访问,仍会允许迭代器的顺序访问。


erase():删除迭代器指向元素的值,返回一个迭代器,指向紧跟在删除掉的元素后面的元素。

  • 要将结果重新赋值给迭代器

list类型

  • 定义于头文件<list>中,可以在容器中的任何位置快速插入和删除元素。
    • 顺序访问容器,list的速度比vector慢。
    • 容器主要是尾部增长或缩小的话,vector的性能比list好。
    • 容器删除很多元素或大规模输入,list速度更快。
    • vector的操作大多可以转化成对list的,但是list不支持索引。

listvector的重要差别

对迭代器进行某些操作产生的影响彼此不同

  • vector删除一个元素,指向被删除元素或随后的元素的迭代器都会失效;使用push_backvector添加一个元素会使指向vector的迭代器失效。
  • listerasepush_back操作不会使指向其他元素的迭代器失效,只有指向已被删除的元素的迭代器才会失效。
    list类不支持完全随机访问,不能使用标准库中的sort函数对list中的值进行排序,list类提供自己的sort成员函数。
    l.sort l.sort(cmp) 使用适用于list元素类型的<运算符来排列l中的元素,或使用判定cmp来排列元素。

从容器中删除元素,选择list
小规模输入,list效率要比vector低;
大规模输入,不适当使用的vector程序运行起来比使用list慢得多。

string字符串

特殊的容器,仅包含字符,支持某些容器操作(索引);string类型提供了迭代器,与vector迭代器类似。


s.substr(i,j):创建一个新的字符串保存s在区间[i,i+j)中的索引所指示的字符的一个复件。
getline(is, s):定义于<string>,读输入直到行尾,第一个参数是输入流(istream),从这个流读数据;第二个参数是一个字符串引用,将读到的数据存储在这个字符串引用中。



<cctype>头文件为处理字符数据而提供了有用的函数:
isspace(c)如果c是一个空白字符则结果为true(真)。
isalpha(c)如果c是一个字母字符则结果为true(真)。
isdigit(c)如果c是一个数字字符则结果为true(真)。
isalnum(c)如果c是一个字母或数字则结果为true(真)。
ispunct(c)如果c是一个标点字符则结果为true(真).
isupper(c)如果c是一个大写字母则结果为true(真)。
islower(c)如果c是一个小写字母则结果为true(真)。
toupper(c)产生一个等于c的大写字母。
tolower(c)产生一个等于c的小写字母。

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值