设为首页 加入收藏

TOP

C++学习:范围for(range for)语句
2015-07-20 17:13:31 来源: 作者: 【 】 浏览:2
Tags:学习 范围 for range 语句

语法

范围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对象中标点符号的个数:

size_t cntPunct(string s) {
    decltype(s.size()) punct_cnt = 0; // punct_cnt 的类型和s.size()的返回类型一样
    for (auto c : s)
        if (ispunct(s))
            ++punct_cnt;

    return punct_cnt;
}

Example 2

如果想要改变expression对象中的值,必须把循环变量定义成引用类型。使用这个引用,我们就可以改变它绑定的元素。

将字符串改写为大写字母:

void string_toupper(string &s) {
    for (auto &c : s)
        c = toupper(c);
}

Example 3

如果我们既想用引用,又不想改变原始值,那么可以用const 引用。

打印字符串:

void string_print(string &s) {
    for (const auto &c : s)
        std::cout << c <<  ;
}
?
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++RTTI小总结 下一篇BZOJ 3613 HEOI 2014 南园满地堆..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·【C语言】动态内存管 (2025-12-27 06:23:20)
·C语言中的内存管理 - (2025-12-27 06:23:16)
·C语言指南:C语言内 (2025-12-27 06:23:14)
·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)