C++11实用技术(四)for循环该怎么写

简介: C++11实用技术(四)for循环该怎么写

普通用法

在C++遍历stl容器的方法通常是:

#include <iostream>
#include <vector>
int main() {
  std::vector<int> arr = {1, 2, 3};
  for (auto it = arr.begin(); it != arr.end(); ++it)
  {
    std::cout << *it << std::endl;
  }
  return 0;
}

上述代码需要关注迭代器,也需要显示得给出容器的begin和end。不便于书写。C++11支持基于范围的for循环。如下

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

C++11基于范围的for循环如下所示:

#include <iostream>
#include <vector>
int main() {
  std::vector<int> arr = {1, 2, 3};
  for (auto n : arr)
  {
    std::cout << n << std::endl;
  }
  return 0;
}

还可以使用引用修改容器的值:

#include <iostream>
#include <vector>
int main() {
  std::vector<int> arr = {1, 2, 3};
  for (auto& n : arr)
  {
    n++;
  }
  //n的值为2,3,4
  return 0;
}

map容器也支持:

#include <iostream>
#include <map>
#include <string>
int main() {
  std::map<std::string, int> mp = { {"1",1}, {"2", 2}, {"3", 3} };
  for (auto& n : mp)
  {
    std::cout << n.first << " -> " << n.second << std::endl;
  }
  return 0;
}

注意

但基于范围的for循环,在循环时不支持修改容器:

例如:

#include <iostream>
#include <vector>
int main() {
  std::vector<int> arr = { 1, 2, 3 };
  for (auto n : arr)
  {
    std::cout << n << std::endl;
    arr.push_back(4);//修改arr
  }
  return 0;
}

运行结果:

主要原因是上面for循环虽然没显式看到迭代器,但是其实等价于使用迭代器遍历容器的值,我们在循环时修改容器对象,就会修改迭代器,导致后续的遍历的值都混乱了。

目录
相关文章
|
1月前
|
算法 Linux 程序员
嵌入式工程师以及C++程序员到公司就业需要掌握那些技术?
嵌入式工程师以及C++程序员到公司就业需要掌握那些技术?
|
2月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
81 0
|
2月前
|
设计模式 测试技术 编译器
C++项目中打破循环依赖的锁链:实用方法大全(一)
C++项目中打破循环依赖的锁链:实用方法大全
96 0
|
2月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
35 1
|
2月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
40 1
|
2月前
|
存储 编解码 vr&ar
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
用C++实现视频编码器:FFmpeg与SDL技术结合,轻松编写高效编解码器
92 0
|
2月前
|
缓存 编译器 数据处理
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
【C/C++ 性能优化】循环展开在C++中的艺术:提升性能的策略与实践
61 0
|
2月前
|
存储 缓存 算法
高效编程:我们应该了解哪些编译器优化技术?如何做出成熟的优化行为,掌握C++编程中的编译器优化艺术。
高效编程:我们应该了解哪些编译器优化技术?如何做出成熟的优化行为,掌握C++编程中的编译器优化艺术。
102 4
|
7天前
|
存储 安全 编译器
【C++】基础知识讲解(引用、内联、auto,基于范围for循环)
【C++】基础知识讲解(引用、内联、auto,基于范围for循环)
16 1
|
14天前
|
消息中间件 算法 Java
C++实时通信优化技术探究
C++实时通信优化技术探究
24 3