范围for语句
2017-07-25 08:59
246 查看
范围for语句语法形式:
如果想对string对象中的每个字符进行操作,目前最好的办法是使用C++11新标准提供的一种语句:范围for语句范围for(range for)语句遍历给定序列中的每个元素并对序列中的每个值执行某种操作,其语法形式是:
for (declaration : expression) statement
expression部分是一个对象,必须是一个序列,比方说用花括号括起来的初始值列表、数组或者vector或string等类型的对象。这些类型的共同特点是拥有能返回迭代器的begin和end成员。declaration
部分负责定义一个变量,该变量将被用于访问序列中的基础元素。每次迭代,declaration部分的变量会被初始化为expression部分的下一个元素值。确保类型相容最简单的办法是使用auto类型说明符。
虽然我们通常称new T [ ]分配的内存为“动态数组”,但是要记住我们所说的动态数组并不是数组类型,这是很重要的。当用new分配一个数组时,我们并未得到一个数组类型的对象,而是得到一个数组元素类型的指针。由于分配的内存并不是一个数组类型,因此不能对动态数组调用begin或end。出于相同的原因,也不能用范围for语句来处理动态数组中的元素。
Example 1
使用范围for语句和ispunct函数来统计string对象中标点符号的个数:#include<iostream> using namespace std; int main() { string s("Hello World!!!"); decltype(s.size()) punct_cnt = 0; for(auto c : s) if(ispunct(c)) ++punct_cnt; cout << punct_cnt << endl; }
Example 2
如果想要改变expression对象中的值,必须把循环变量定义成引用类型。使用这个引用,我们就可以改变它绑定的元素。将字符串改写为大写字母:
#include<iostream> using namespace std; int main() { string s("Hello World!!!"); for(auto &c : s) c = toupper(c); cout << s << endl; }
在这里说明以下为什么要把循环变量定义成引用类型auto &c而不是auto c,刚开始一下子没反应过来,觉得为什么不用auto c 做循环变量呢,想了想,想明白了
因为我们用范围for语句时候,这个循环变量,如果定义为 auto c,每次迭代的时候,相当于用一个变量 c=s
,(n代表元素下标),变量c是和string s没有关系的,c是独立于s之外,有自己的空间,范围for语句只是把s每个元素的值赋给了c,所以对c进行操作,只是改变了c的值,而原来字符串s中的元素并没有改变。
如果用auto &c的话,每次迭代时候,相当于把引用c绑定在了s的元素上,这样的话引用c所代表的就是s当前的元素,对引用c进行操作修改,也就是对s的元素进行修改,所以如果要对字符串s的元素进行修改的时候,必须把循环变量定义为引用
auto &c
Example 3
如果我们既想用引用,又不想改变原始值,那么可以用const 引用。打印字符串:
#include<iostream> using namespace std; int main() { string s("Hello World!"); for(const auto &c : s) cout << c << endl; }
相关文章推荐
- 范围for语句
- C++中基于范围的for语句
- 【足迹】C++ primer 范围for语句
- C++2.0--范围for语句
- 范围 for 语句与二维数组
- C++ Primer中的陌生概念四:范围for语句
- std 中for_each 算法与c++11范围for语句
- 使用范围for语句和while循环以及传统for的区别
- Cocos2dx3.0过渡篇 各种遍历与范围for语句的使用【转】
- 类内初始化,范围for语句,vector的vector,容器的cbegin和cend
- 范围for语句的整理
- 基于范围的 for 语句 (C++)
- Cocos2dx3.0过渡篇(二十二)各种遍历与范围for语句的使用
- 范围for语句
- C++ primer 六 范围for语句
- C++ Prime:范围for语句
- 使用范围for语句遍历字符串,中间变量是字符型还是字符串。
- 范围for语句
- C++11范围for(range for)语句
- C++学习笔记(八):对字符的操作函数和范围for语句的使用