C++11之基于范围的for循环

简介: C++11之基于范围的for循环

基于范围的for循环

C++98遍历方式

在C++98标准中,当我们遍历数组时,一般方法就是下标遍历和指针遍历。

  int arr[] = { 1,2,3,5,6 };
  // 下标遍历
  for(size_t i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
  {
    std::cout << arr[i] << " ";
  }
  std::cout << std::endl;
  // 指针遍历
  int* p = arr;
  for(p = arr; p < arr + sizeof(arr) / sizeof(arr[0]); ++p)
  {
    std::cout << *p << " ";
  }
  std::cout << std::endl;

当然还有一种遍历方式,需要包含<algorithm>头文件的for_each遍历。参数依次是:起始地址、结束地址、回调函数。地址是左闭右开区间[begin,end)

#include <iostream>
#include <algorithm>
void print(const int& elem)
{
  std::cout << elem << " ";
}
// for_each遍历
std::for_each(arr, arr + sizeof(arr) / sizeof(arr[0]), print);
std::cout << std::endl;


C++11 范围遍历

上述的几种遍历方式的共同点就是都需要写明循环的一个范围。对于我们需要完整的遍历一个有范围的集合/数组时,完全可以让编译器自动计算出范围。因此C++11引入了基于范围的for循环


格式:for(迭代的变量:数组){}

现在我们使用范围遍历对数组进行遍历。

  for(const int& e: arr)
  {
    std::cout << e << " ";
  }
  std::cout << std::endl;


然后我们可以在这里加入auto自动类型(C++11),遍历将会更加简单。

for (const auto& elem : arr)
  {
    std::cout << elem << " ";
  }
  std::cout << std::endl;


但范围遍历不能适用于所有情况,范围遍历的条件就是循环迭代的范围必须是可确定的。例如stringarrayvectorlistmap等都是可以正常使用的。而用户自定义写的类则需要自行提供自增运算符重载赋值运算符重载

  int* ptr = arr;
  for(auto elem : ptr)
  {
    std::cout << elem << " ";
  }
  std::cout << std::endl;


遍历没有明确范围的数组,是不能使用范围遍历方法的。

在使用范围遍历的方式遍历stl的容器时,如果你使用auto声明迭代器的变量,那么推导出来的类型是迭代器解引用后的对象。

  std::vector<int> vec{ 1,5,6,9,4 };
  for (const auto iter = vec.begin(); iter != vec.end(); ++iter)
  {
    std::cout << *iter << " ";
  }
  std::cout << std::endl;
  for(const auto& elem : vec)
  {
    std::cout << elem << " ";
  }
  std::cout << std::endl;


这里就需要注意了前者iter类型是迭代器对象,后者elem是解引用后的对象。

目录
相关文章
|
2月前
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
81 0
|
3月前
|
机器学习/深度学习 C++
C/C++基础知识——数组、循环
C/C++基础知识——数组、循环
45 0
C/C++基础知识——数组、循环
|
2月前
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
56 0
|
3天前
|
安全 编译器 程序员
【C++入门】内联函数、auto与基于范围的for循环
【C++入门】内联函数、auto与基于范围的for循环
|
3天前
|
C++ Python
C++教学——从入门到精通 10.循环
学习编程建议先Python后C++,以避免C++思维影响。课程涵盖for、while和do while循环。for循环示例:`for(int i=0;i&lt;n;i++)`,用于计算114514天后的金币总数(1145140个)。死循环通过`for(int i=0;;i++)`实现,用`break`退出。while循环格式`while(条件)`,同样可解决金币问题。do while循环特点是先执行后判断,结构为`do{...}while(条件)`。
13 2
|
28天前
|
C++
C++ While 和 For 循环:流程控制全解析
本文介绍了C++中的`switch`语句和循环结构。`switch`语句根据表达式的值执行匹配的代码块,可以使用`break`终止执行并跳出`switch`。`default`关键字用于处理没有匹配`case`的情况。接着,文章讲述了三种类型的循环:`while`循环在条件满足时执行代码,`do/while`至少执行一次代码再检查条件,`for`循环适用于已知循环次数的情况。`for`循环包含初始化、条件和递增三个部分。此外,还提到了嵌套循环和C++11引入的`foreach`循环,用于遍历数组元素。最后,鼓励读者关注微信公众号`Let us Coding`获取更多内容。
21 0
|
2月前
|
设计模式 敏捷开发 持续交付
C++项目中打破循环依赖的锁链:实用方法大全(三)
C++项目中打破循环依赖的锁链:实用方法大全
53 0
|
2月前
|
测试技术 持续交付 API
C++项目中打破循环依赖的锁链:实用方法大全(二)
C++项目中打破循环依赖的锁链:实用方法大全
59 0
|
2月前
|
并行计算 编译器 程序员
提升C/C++编程效率:深入C/C++ for循环的优化与应用
提升C/C++编程效率:深入C/C++ for循环的优化与应用
72 0
|
2月前
|
C++
C++系列八:选择、循环与转向
C++系列八:选择、循环与转向