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,在基于优先级的适当位置插入新元素

 


智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值