首页 > 后端开发 > C++ > 如何在 C 11 中正确使用基于范围的 For 循环?

如何在 C 11 中正确使用基于范围的 For 循环?

Patricia Arquette
发布: 2024-12-29 20:19:12
原创
301 人浏览过

How Can I Correctly Use Range-Based For Loops in C  11?

C 11 中正确使用基于范围的 for 循环的方法

基于范围的 for 循环是一种简明且强大的 Iterator 遍历机制,已于 C 11 中引入。它用于遍历容器或其他可迭代序列,并通过一个或多个变量引用该序列中的元素。以下是如何正确使用基于范围的 for 循环:

语法

for (auto elem : container) {
  // 代码体
}
登录后复制

其中:

  • auto 关键字表示编译器将自动推断元素类型。
  • elem 是循环中的元素的迭代器变量。
  • container 是要遍历的容器或可迭代序列。

元素捕获模式

使用基于范围的 for 循环时,可以选择以下三种元素捕获模式之一:

  1. 按值捕获(auto elem):创建一个元素的本地副本。这适用于元素是便宜复制的类型(例如 int、double 等)。
  2. 按引用捕获(auto& elem):直接引用容器中的元素。这用于修改元素或需要避免复制的类型。
  3. 按引用捕获 proxy(auto&& elem):用于遍历使用“proxy 迭代器”的容器(例如 std::vector)。

观测还是修改

基于范围的 for 循环可以用于两种主要目的:

  1. 观测元素:使用 const auto& elem 捕获元素,以确保不会修改原始元素。
  2. 修改元素:使用 auto& elem 捕获元素,以直接修改原始元素。

准则

要正确使用基于范围的 for 循环,请考虑以下准则:

  • 对于观测元素,使用:
for (const auto& elem : container) // 按引用捕获常量
登录后复制
  • 对于修改元素,使用:
for (auto& elem : container) // 按引用捕获
登录后复制
  • 如果容器使用“proxy 迭代器”,使用:
for (auto&& elem : container) // 按引用捕获 proxy
登录后复制

泛型代码中的注意事项

在泛型代码中,建议使用 const auto& elem 捕获元素以进行观测,以及 auto&& elem 捕获元素以进行修改,因为这些方法适用于各种类型的容器和元素。

以上是如何在 C 11 中正确使用基于范围的 For 循环?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板