在C++中是否可能获得一个索引迭代器?

3
许多编程语言允许迭代遍历可迭代数据类型,并随着迭代过程中的位置变化而更新。例如...
Python:
for index, value in enumerate(some_list):
    ...

Ruby/Crystal:

some_list.each_with_index do |value, index|
  ...
end

Rust:
for (value, index) in some_iterable.enumerate() {
    ...
}

根据迭代器的不同,仅使用普通的for循环也可能效率低下:

for(int i = 0; i < some_list.size(); i++) {
    auto value = some_list[i];
}

有没有C++提供类似概念的表达方式?

1
我认为没有这样的内置结构,但实现它应该非常简单。您可以创建一个迭代器,返回带有其索引的元素对,或者您可以使用https://en.cppreference.com/w/cpp/language/structured_binding。 - Thomas Sablik
1个回答

4

我不知道有没有标准的做法,但是boost提供了:

#include <boost/range/adaptor/indexed.hpp>
#include <boost/assign.hpp>
#include <iterator>
#include <iostream>
#include <vector>

int main(int argc, const char* argv[])
{
    using namespace boost::assign;
    using namespace boost::adaptors;

    std::vector<int> input;
    input += 10,20,30,40,50,60,70,80,90;

    for (const auto& element : input | indexed(0))
    {
        std::cout << "Element = " << element.value()
                  << " Index = " << element.index()
                  << std::endl;
    }

    return 0;
}

这个示例是从 文档 中提取的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接