从for_each循环获取当前索引

时间:2014-08-05 09:29:17

标签: c++ foreach

使用像这样的for循环时

for(int i=0 ; i<collection.size() ; i++)
{
  //current index is i and total size is size
}

但是我有类似的东西

  for_each(collection.begin(), collection.end(), [&](MyTuple& e)
        {
            //Total size would be collection.size()
            //How would i get the current index ?
        });

2 个答案:

答案 0 :(得分:1)

你必须在循环上方放置一个计数器变量,在lambda中捕获它并每次递增它。由于这很尴尬,我建议你在元素索引很重要时不要使用for_each(仅限我的意见)。

size_t count = 0;
for_each(collection.begin(), collection.end(), [&count](MyTuple& e)
{
    ...
    ++count;
});

答案 1 :(得分:1)

在迭代器范围内使用std::for_each算法,如果不对迭代器应用特殊的适配器,则不会为您提供索引。但是,在迭代器范围上使用vanilla for可以为您提供如下索引:

for(auto it = collection.begin(); it != collection.end(); ++it)
{
    const auto index = std::distance(collection.begin(), it);
    ...
}

请注意,上面的index仅对“索引到数组” - 随机访问迭代器的语义有意义。