"for(const auto&s:strs){}"是什么意思?

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)

ere*_*eOn 9

它实际上是一个名为"基于范围的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适用于它们.