C++刷题之二:vector迭代器的使用

刷题之二:vector迭代器的使用

在遍历vector中的数组元素时,可以使用迭代器
请添加图片描述

for(Vector<int>::iterator it = n.begin(); it != n.end(); ++it){
	cout << *it << “”;
}

当然也可以使用传统又不传统的for循环进行遍历

新for

请添加图片描述

for(int num: nums)
{
	cout << num << “”;
}

老for

请添加图片描述

for(size_t i = 0; i < nums.size(); i++)
{
	cout << nums[i] << “”;
}

size_t是什么?

size_t 是一种在 C++ 和其他编程语言中广泛使用的数据类型,用于表示数组和其他数据结构的大小和索引。它是一个无符号整数类型,通常是由标准库中定义的,确保它足够大,可以用来表示系统允许的最大任何对象的大小。

为什么使用 size_t?

使用 size_t 的主要理由是它专为存储大小设计,它可以有效地与系统的内存大小和架构(如32位或64位)对齐。这使得 size_t 成为表示数组索引、循环计数、以及与大小相关的任何计算的理想选择,因为它总是足够大,可以表示可能的最大值。
为什么可以直接定义 i?
在 C++ 中,你可以在 for 循环的初始化表达式中声明循环变量 i,如下所示:

for (size_t i = 0; i < nums.size(); i++) {
    // 循环体
}

在这里,i 被声明为 size_t 类型,直接在 for 循环的括号内进行。这样的声明是局部的,意味着变量 i 只在 for 循环的作用域内有效。这是 C++(特别是 C++11 及以后版本)提供的一种简化循环控制变量管理的方式,增加了代码的可读性和整洁性。

优点

  • 类型安全:使用 size_t 可以避免一些类型不匹配的警告和错误,因为 .size() 方法返回的也是 size_t 类型。
  • 避免溢出:由于 size_t 是无符号的,使用它作为索引类型在进行大小比较时可以避免负数相关的逻辑错误。
  • 兼容性:在处理标准库容器(如std::vector, std::string等)的大小时,使用 size_t 可以提高代码的兼容性和可移植性。
    使用 size_t 是一种最佳实践,特别是在涉及大小和索引的计算中,它帮助确保代码的安全和效率。

迭代器的简单表示方法

使用迭代器的时候写vector::iterator 比较麻烦
vector:: 这部分在C++中被称为 "作用域解析运算符”,它用于指定一个特定的命名空间或类的作用域内的成员。在 vector<int>::iterator 的例子中,它指定 iterator 是 vector 这个模板实例的一个成员。

所以可以使用using IntVecIterator = vector<int>::iterator来进行代替,就像c语言里面的#define 宏定义一样
然后再定义迭代器进行循环遍历元素就可以直接使用

for( IntVecIterator it = n.begin(); it != n.end(); ++it){
	cout << *it << “”;
}

这里面有一个问题:为什么要++it呢?而且是it!=n.end()

为什么使用 ++it?

++it 用于将迭代器 it 移动到容器中的下一个元素。这是因为迭代器在被创建时通常指向容器的第一个元素(通过 begin() 函数),并且需要逐个访问容器中的后续元素。++it 是一种“前增量”操作,意味着先增加迭代器的位置,然后返回增加后的迭代器的值。这个操作是必须的,因为如果不移动迭代器,你将一直在访问同一个元素,从而造成无限循环。
在 for 循环中,每次循环结束时执行 ++it,确保下一次循环迭代器指向下一个元素。这种前缀递增(++it)通常比后缀递增(it++)效率更高,特别是对于复杂的迭代器对象,因为它避免了不必要的临时对象的创建。

为什么使用 it != n.end()?

it != n.end() 是循环条件,用于判断迭代器是否已经到达容器的末尾。在 C++ 的容器中,end() 方法返回一个迭代器,它指向容器的最后一个元素之后的位置,这不是一个有效的元素位置,而是一个边界标记。如果迭代器 it 等于 n.end(),那么意味着迭代器已经遍历完容器中的所有元素。
这个条件确保了 for 循环可以安全地访问容器中的每一个元素,直到迭代器到达容器的末尾。如果没有这个检查,访问超出容器范围的元素将导致未定义行为,通常是内存访问错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Every DAV inci

小辣鸡一枚,不求打赏啦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值