C++ primer 笔记 第三章 vector 和迭代器

3.3 标准库的vector 类型

vector 是同一类型的对象的集合,每个对象都有一个对应的索引值。和string对象一样,标准库将负责管理与存储元素相关的内存。我们把vector称为容器,是因为他可以包含其他对象。一个容器中所有的独享必须是同一种类型的。

使用vector之前,必须包含相应的头文件:

#include <vector>
using std::vector;

 vector 是一个类模板(class template)。使用模板可以编写一个函数或类定义,而用于多个不同的数据类型。

声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:

vector <int> ivec;

上面的定义,类型是vector<int>,该类型即使含有若干int类型对象的vector ,变量名为ivec。

注意: vector 不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector<string>都是数据类型

3.3.1 vector 对象的定义和初始化

vector定义了好几种类型的构造函数,用来定义和初始化vector对象。

1.创建确定个数的元素

关键概念:vector对象的动态增长

vector 对象的重要属性就在于可以在运行时高效地添加元素。因为vector 的增长效率高,当元素值已知的时候,最好是通过动态的向它添加元素来让它增长。

虽然,可以对给定元素个数的vector对象预先分配内存,但是更有效的方法是先初始化一个空的vector对象,然后再动态地增加内存。

 3.3.2 vector 对象的操作

1.vector对象的size

成员函数 size返回相应vector类定义的size_type的值。和string类似。

2.向vector添加元素

push_back() 操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面。

也就是插入(push)到vector对象的后面(back)。

string word;
vector <string > text;
while(cin>>word){
text.push_back(word);
}

 

3.vector 的下标操作
vector 的下标操作类似于string。但是,下标操作不能添加元素,只能用vector 的push_back来进行元素的添加。下标操作只能针对已经存在的元素。
注意:安全的泛型编程
习惯于c或者java的程序员可能觉得在对vector操作中, for循环的判断条件用!=而不是大于或者小于号来判断难以理解。
调用size成员函数而不是保存它返回的值是一种良好的编程习惯。在C++中有些数据结构(如vector)可以动态的增长。循环可以很容易的增加新元素,如果确实增加了新元素的话,,那么测试已经保存的size值作为循环结束的条件就会有问题。所以我们倾向于,在每次循环中测试size 的当前值,而不是在循环之前就将他保存下来。
警告:仅能对确知已存在的元素进行下标操作
3.4 迭代器(iterator)
迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器都定义了一种迭代器类型。迭代器提供了比下标操作更通用化的方法:所有的标准库都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
1.容器的iterator类型
 每种容器都定义了自己的迭代器类型如:vector:
vector <int >::iteractor iter;
上面这条语句定义了一个名为iter的变量,他的数据类型是由vector <int>定义的iteractor 类型,这里的iteractor与迭代器实际类型含义相同。
2.begin和end操作
每种容器都定义了一堆名为begin和end 的函数,用于返回迭代器。
如果容器内有元素的话,由begin返回的迭代器指向的是第一个元素。
vector <int >::iteractor iter=ivec.begin();
上述语句吧iter初始化为由名为begin的vector操作返回的值。假设vector不为空,初始化后,iter 即指该元素为ivec[0];
由end 操作返回的迭代器指向vector的“末端元素的下一个”。通常称为“超出末端迭代器”,表明他指向了一个不存在的元素, 如果vector为空,begin返回的迭代器和end 返回的迭代器相同。
注解: 由end 操作返回的迭代器并不指向vector中的任何实际元素,相反它只是起一个哨兵的作用,表示我们已经处理完vector中所有的元素。
3。vector 迭代器的自增和解引用运算
 迭代器类型可以使用解引用操作符(* 操作符)来访问迭代器指向的元素:
 * iter=0;
 
 解引用操作符返回迭代器当前所指向的元素。假设iter指向vector对象的第一个元素,那么*iter和和ivec就是指向同一个元素。上面这个语句就是的效果就是把这个元素赋值为0;
++iter,自增运算,将iter指向的位置下移一个。岁end操作返回的迭代器不能进行自增和解引用操作。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值