一些C++11语言新特性 - Range-Based for Loops

1. Range-Based for Loops

for ( decl : coll ) {
 statement
}

eg:

for ( int i : { 2, 3, 5, 7, 9, 13, 17, 19 } ) {
    std::cout << i << std::endl;
}
std::vector<double> vec;
...
for ( auto& elem : vec ) {
    elem *= 3;
}

Here, declaring elem as a reference is important because otherwise the statements in the body of the for loop act on a local copy of the elements in the vector (which sometimes also might be useful).

This means that to avoid calling the copy constructor and the destructor for each element, you should usually declare the current element to be a constant reference. Thus, a generic function to print all elements of a collection should be implemented as follows:

template <typename T>
void printElements (const T& coll)
{
    for (const auto& elem : coll) {
        std::cout << elem << std::endl;
    }
}

那段range-based for loops代码等价于如下:

for (auto _pos=coll.begin(); _pos != coll.end(); ++_pos ) {
    const auto& elem = *_pos;
    std::cout << elem << std::endl;
}
int array[] = { 1, 2, 3, 4, 5 };
long sum=0; // process sum of all elements
for (int x : array) {
    sum += x;
}
for (auto elem : { sum, sum*2, sum*4 } ) { // print 15 30 60
    std::cout << elem << std::endl;
}
时间: 2024-10-12 21:41:17

一些C++11语言新特性 - Range-Based for Loops的相关文章

一些C++11语言新特性 - Uniform Initialization

1. Uniform Initialization int values[] { 1, 2, 3 }; std::vector<int> v { 2, 3, 5, 7, 11, 13, 17 }; std::vector<std::string> cities { "Berlin", "New York", "London", "Braunschweig", "Cairo", &qu

【C++11】新特性——Lambda函数

本篇文章由:http://www.sollyu.com/c11-new-lambda-function/ 文章列表 本文章为系列文章 [C++11]新特性--auto的使用 http://www.sollyu.com/c11-new-features-auto/ [C++11]新特性--Lambda函数 http://www.sollyu.com/c11-new-lambda-function/ 说明 在标准 C++,特别是当使用 C++ 标准程序库算法函数诸如 sort 和 find,用户经常

Qt5 中对 C++11 一些新特性的封装

在 Qt5 中,提供更多 C++11 的特性支持,接下来我们将进行详细的说明. slots (槽) 的 Lambda 表达式 Lambda表达式 是 C++11 中的一个新语法,允许定义匿名函数.匿名函数可用于使用小函数作为参数,而无需显式的进行声明.之前可以通过编写函数指针来达到同样的目的. 在 Qt 4.8 中已经可在一些 QtConcurrent 函数中使用 Lambda 表达式了.但在 Qt5 中甚至可以通过 new connect syntax 来将 Lambda 表达式作为 slot

C++11 标准新特性:Defaulted 和 Deleted 函数

前两天写的铁字中提到了C++的删除函数,今天特地去网上查了查,转载了一篇不错的文章... 转载自 http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/index.html C++11 标准新特性:Defaulted 和 Deleted 函数 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代

C++11 标准新特性: 右值引用与转移语义

C++ 的新标准 C++11 已经发布一段时间了.本文介绍了新标准中的一个特性,右值引用和转移语义.这个特性能够使代码更加简洁高效. 查看本系列更多内容 | 3 评论: 李 胜利, 高级开发工程师, IBM 2013 年 7 月 10 日 内容 在 IBM Bluemix 云平台上开发并部署您的下一个应用. 开始您的试用 新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move

atitit.Oracle 9 10 11 12新特性attilax总结

atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. 其他(大部分是管理功能) 2 2. Oracle 12c 的 12 个新特性 2 2.1. 2 Improved Defaults 增强了DEFAULT, default目前可以直接指代sequence了,同时增强了default充当identity的能力 2 2.2. Easy Top-N an

c++11的新特性

好奇心来源于下面的一段代码, 一个是unordered_map, 这是c++11新加的container. 另外还有unordered_set, unordered_multimap, unordered_multiset. 另外在for循环中, 可以使用下列形式: 1 for (auto &element : container) { 2 std::cout << element << std::endl; 3 } 还有一点就是变量的初始化, 请注意: int maxle

stout代码分析之九:c++11容器新特性

stout大量使用了c++11的一些新特性,使用这些特性有利于简化我们的代码,增加代码可读性.以下将对一些容器的新特性做一个总结.主要两方面: 容器的初始化,c++11中再也不用手动insert或者push_back来初始化了 容器的遍历,c++11中再也不用使用冗长的迭代器遍历了 让我们一睹为快吧: #include <map> #include <string> #include <iostream> #include <vector> int main

【转】C++11 标准新特性:Defaulted 和 Deleted 函数

原文链接http://www.ibm.com/developerworks/cn/aix/library/1212_lufang_c11new/ 本文将介绍 C++11 标准的两个新特性:defaulted 和 deleted 函数.对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量.对于 deleted 函数, 编译器会对其禁用,从而避免某些非法的函数调用或者类型转换,从而提高代码的安全性.本文将通过代码示例详