【C++11】基于范围的for循环使用说明

一、定义:

C++11 引入了基于范围的 for 循环(Range-based for loop),它是一种方便遍历容器或其他可迭代对象的语法糖

基于范围的 for 循环的语法如下:

for (declaration : range) 
{
    // 循环体
}

其中,declaration 是一个变量声明,用于存储每次迭代中的元素值,可以是自定义的变量名,也可以是已有的变量名。range 是要遍历的容器或可迭代对象,例如数组、std::vectorstd::list 等。

在每次循环迭代中,变量 declaration 会被自动赋值为当前迭代的元素值,然后执行循环体中的代码。循环会依次遍历 range 中的所有元素,直到遍历完为止。

二、使用:

示例1: 遍历 std::vector 容器

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> numbers = {1, 2, 3, 4, 5};

    //使用基于范围的for循环遍历容器
    for (int num : numbers)    //可以使用auto自动类型推导
    {
        std::cout << num << " ";
    }
    
    std::cout << std::endl;
    return 0;
}
//result
1 2 3 4 5

当编译器遇到基于范围的 for 循环时,它会自动将其转换为一个传统的迭代循环,以便遍历指定范围内的元素。

基于范围的 for 循环可以用于各种可迭代对象,包括数组、容器类(如 std::vectorstd::liststd::deque 等)、字符串和自定义的可迭代类型。

循环过程中,每次迭代都会从指定范围中获取下一个元素,并将其赋值给循环变量。这使得在循环体内部可以直接使用循环变量来操作当前元素,而无需显式访问迭代器或索引。

示例2: 如果想修改容器中的元素需要使用引用

#include <iostream>
#include <vector>

int main()
{
	std::vector<int> numbers = { 1, 2, 3, 4, 5 };

	//使用基于范围的for循环遍历容器 - 使用引用修改元素
	for (auto& num : numbers)
	{
		num = num + 1;
	}

    //若无需修改容器中的元素,可以使用const限制
	for (const auto& num : numbers) 
	{
		std::cout << num << " ";
	}

	std::cout << std::endl;
	return 0;
}
//result
2 3 4 5 6

可以看到,基于范围的 for 循环使得遍历容器变得更加简洁和直观,无需关注容器的大小和索引,只需关注每次迭代中的元素值即可。这种语法在许多场景下都能提高代码的可读性和简洁性。

示例3: 使用基于范围的 for 循环遍历一个自定义类型的容器

#include <iostream>
#include <vector>

class Point 
{
public:
    int x, y;

    Point(int x_, int y_) : x(x_), y(y_) {}
};

int main() 
{
    std::vector<Point> points = {{1, 2}, {3, 4}, {5, 6}};

    // 使用基于范围的for循环遍历容器
    for(const auto& point : points) 
    {
        std::cout << "x: " << point.x << ", y: " << point.y << std::endl;
    }

    return 0;
}
//result
x: 1, y: 2
x: 3, y: 4
x: 5, y: 6

上述代码的循环中,每个 point 对象都是容器中的一个元素,可以通过 point.xpoint.y 来访问其成员变量。基于范围的 for 循环使得遍历容器元素变得简洁明了,更利于代码维护。

三、优点:

基于范围的 for 循环优点如下:

  1. 无需显式定义迭代器或索引变量。
  2. 自动处理容器边界,避免越界访问。
  3. 支持只读访问元素,无法修改容器中的元素值。
  4. 循环变量的生命周期仅限于当前循环迭代,循环结束后不再有效。
  5. 循环变量的类型可以是自定义类型,只要对象支持迭代器的访问方式。

如果这篇文章对你有所帮助,渴望获得你的一个点赞!

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OpenC++

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值