c++11——基于范围的for循环

c++11中有基于范围的for循环,基于范围的for循环可以不再关心迭代器的概念,只需要关系容器中的元素类型即可,同时也不必显式的给出容器的开头和结尾。

int arr[] = {1, 2, 3, 4};
for(int a : arr){
...
}

vector<string> str_arr{"hello", "world", "fuck"};
for(auto v : str_arr){
...
}

如果希望修改容器中的元素,则可以使用引用类型:
for(auto& v: arr){
....
}

在使用基于范围的for循环的时候,还需要注意容器本身的一些约束。比如

由于set和map中的元素存放为有很强的大小顺序,因此不能随便修改他们的值
std::set<int> s = {1, 2, 3};
for(auto& val: s){
    std::cout << val ++ << endl;    //出错,由于std::set中的内部元素是只读的,因此for循环的auto会被自动推导为 const int&
}

注意基于范围的for循环的for机制,基于范围的for循环一般在循环开始之前就确定好迭代的范围,而不是在每次迭代之前去调用一次arr.end().

std::vector<int> arr = {1, 2, 3, 4, 5};
for(int a : arr){
    ...
}
相当于
auto && __range = (arr);
for(auto __begin = __range.begin(), __end = __range.end(); __begin != __end; ++__begin){
    ...
}

尽量不要在迭代的过程中修改迭代的容器,但是在不得不这样做的时候,通过理解基于范围的for循环的特点,就可以方便的分析每次迭代的结果,提前避免算法的错误。

+

时间: 2024-12-31 03:32:56

c++11——基于范围的for循环的相关文章

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

C++11包含一种新的 for 循环,称为基于范围的 for 循环,可以简化对数组元素的遍历.格式如下: 1 for(Type VarName : Array){ 2 //每个元素的值会依次赋给 VarName 3 } 例如: 1 int array[] = {1, 2, 3, 4}; 2 for(int x : array){ 3 cout << x; 4 } 5 cout << endl; 例子会输出:1234 定义用于遍历数组的变量时,可以使用和普通函数参数一样的修饰符.本例

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

基于范围的for循环: 对于内置数组以及包含方法begin()和end()的类(如std::string)和STL容器,基于范围的for循环可以简化为他们编写循环的工作.这种循环对数组或容器中的每个元素执行指定的操作: #include <iostream> int main() { double prices[5] = {4.99,10.99,6.87,7.99,8.49}; for (double x : prices) std::cout << x << std:

C++11 新特性(6) 基于范围的for循环

C++11中添加了一项基于范围的for循环,这可以省却我们很多的代码量. 来自维基百科的解释:http://zh.wikipedia.org/wiki/C++0x#.E5.80.99.E9.81.B8.E8.AE.8A.E6.9B.B4 Boost C++ 定义了许多"范围 (range) "的概念.范围表现有如受控制的列表 (list),持有容器中的两点.有序容器是范围概念的超集 (superset),有序容器中的两个迭代器 (iterator) 也能定义一个范围.这些概念以及操作的

c++11之一: 基于范围的for循环

#include <iostream> using namespace std; int main(){ int ary[5]{1,2,3,4,5}; for (int& e: ary) e *= 2; for (int e: ary) cout<<e<<'\t'; cout<<endl; } 编译使用: g++ -o for for.cpp -std=c++11 for循环后的括号由冒号":"分成两部分,第一部分是范围内用于迭代

python入门(11)条件判断和循环

python入门(11)条件判断和循环 条件判断 计算机之所以能做很多自动化的任务,因为它可以自己做条件判断. 比如,输入用户年龄,根据年龄打印不同的内容,在Python程序中,用if语句实现: age = 20 if age >= 18: print 'your age is', age print 'adult' 根据Python的缩进规则,如果if语句判断是True,就把缩进的两行print语句执行了,否则,什么也不做. 也可以给if添加一个else语句,意思是,如果if判断是False,

Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列

Atitit.升级软件的稳定性---基于数据库实现持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1. 用一个游标last 来指示 (指针表字段last ),麻烦的,不推荐 1 1.2. (简单,推荐)使用循环次数来指示,每循环加1   (字段cirTimes),order by cirtimes 1 4. 表格设计id, cirTimes,createtime,handlerID,recID,d

基于范围的for循环(STL)

1. double prices[5]={4.99,5.99,6.99,7.99,8.99}; for (double x : prices) cout<<x<<endl; //////////////// for (auto x : prices) cout<<x<<endl; 不同于for_each(),基于范围的for循环可修改容器的内容,诀窍是指定一个引用参数.

数学-线性代数导论-#11 基于矩阵A生成的空间:列空间、行空间、零空间、左零空间

线性代数导论-#11 基于矩阵A生成的空间:列空间.行空间.零空间.左零空间 本节课介绍和进一步总结了如何求出基于一个m*n矩阵A生成的四种常见空间的维数和基: 列空间C(A),dim C(A) = r,基 = { U中主元列对应的原列向量 }: 行空间C(AT), dim C(AT) = r,基 = { U中的主元行 }: 1.为什么行空间不表示为R(A)而表示为C(AT)? 因为转置是矩阵的行与列之间的桥梁. 既然我们已经研究过列空间,通过转置,我们可以将行空间视为转置矩阵的列空间. 2.行

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

这简化了一种常见的循环任务:对数组或容器类,如vector和array,的每个元素执行相同的操作. 1 double prices[5] = {4.99, 10.99, 6.87, 7.99, 8.49}; 2 3 for (double x : prices) 4 5 std::cout<< x << std::endl; 6 7 for (double &x : prices) 8 9 x = x *0.80; 10 11 for (int x: {3, 5, 2, 8