使用像这样的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 ?
});
答案 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
仅对“索引到数组” - 随机访问迭代器的语义有意义。