kar*_*llo 3 c++ for-loop stl range c++11
什么for (const auto &s : strs)
意思?结肠的功能是:
什么?
vector<string> &strs;
for (const auto &s : strs){
//
}
Run Code Online (Sandbox Code Playgroud)
它实际上是一个名为"基于范围的for-loops"的C++ 11特性.
在这种情况下,它基本上是一个更易于编写的替代品:
// Let's assume this vector is not empty.
vector<string> strs;
const vector<string>::iterator end_it = strs.end();
for (vector<string>::iterator it = strs.begin(); it != end_it; ++it) {
const string& s = *it;
// Some code here...
}
Run Code Online (Sandbox Code Playgroud)
这:
是新语法的一部分.
在左边,你基本上有一个变量声明,它将绑定到向量的元素,右边有一个变量可以迭代(也称为"范围表达式").
以下是链接文档的摘录,它解释了范围表达式的先决条件:
计算range_expression以确定要迭代的序列或范围.反过来,序列的每个元素都被解除引用并分配给变量,其范围和名称在range_declaration中给出.
begin_expr和end_expr定义如下:
如果__range是一个数组,那么begin_expr是__range而end_expr是(__range + __bound),其中__bound是数组中元素的数量(如果数组的大小未知或类型不完整,则程序格式错误)
如果__range的类型是具有开始或结束成员函数之一或两者的类类型,则begin_expr是__range.begin(),end_expr是__range.end();
否则,begin_expr是begin(__ range),end_expr是end(__ range),它们是通过参数依赖查找找到的,std作为关联的命名空间.
请注意,由于所有这些,基于范围的for循环也支持迭代C数组作为std::begin
/也std::end
适用于它们.
归档时间: |
|
查看次数: |
2361 次 |
最近记录: |