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循环虽然没显式看到迭代器,但是其实等价于使用迭代器遍历容器的值,我们在循环时修改容器对象,就会修改迭代器,导致后续的遍历的值都混乱了。

目录
相关文章
|
2月前
|
存储 算法 C++
C++提高篇:泛型编程和STL技术详解,探讨C++更深层的使用
文章详细探讨了C++中的泛型编程与STL技术,重点讲解了如何使用模板来创建通用的函数和类,以及模板在提高代码复用性和灵活性方面的作用。
50 2
C++提高篇:泛型编程和STL技术详解,探讨C++更深层的使用
|
5月前
|
存储 分布式数据库 API
技术好文:VisualC++查看文件被哪个进程占用
技术好文:VisualC++查看文件被哪个进程占用
|
1月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
程序员 C++
C++编程:While与For循环的流程控制全解析
总结而言,`while`循环和 `for`循环各有千秋,它们在C++编程中扮演着重要的角色。选择哪一种循环结构应根据具体的应用场景、循环逻辑的复杂性以及个人的编程风格偏好来决定。理解这些循环结构的内在机制和它们之间的差异,对于编写高效、易于维护的代码至关重要。
51 1
|
1月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
人工智能 Anolis
聚焦C++20 最新标准!技术 Workshop 精彩亮点一览 | 2024 龙蜥大会
多场技术 Workshop、多位领域专家亲自授课,分享独家洞察与宝贵经验。
|
3月前
|
算法 C# 开发工具
《黑神话:悟空》背后的编程语言揭秘——超越C++的多元技术融合
【8月更文挑战第27天】在游戏开发领域,一款游戏的成功往往离不开其背后强大的技术支持和编程语言的精妙运用。《黑神话:悟空》作为备受瞩目的国产单机动作游戏,其开发过程不仅涉及了多种编程语言,更是一次技术创新的集中展现。然而,当我们深入探讨其开发语言时,会发现它并非仅依赖于单一的C++,而是融合了多种编程语言的优势,共同铸就了这款游戏的辉煌。
253 0
|
3月前
|
存储 程序员 C++
【C++小知识】基于范围的for循环(C++11)
【C++小知识】基于范围的for循环(C++11)
|
4月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
5月前
|
算法 程序员 编译器
C++的四类循环分享
C++的四类循环:Entry or Exit controlled, Ranged-based or For_each