使用基于范围的 for 循环自定义容器遍历

WAi*_*T39 6 c++ traversal c++11

在 C++ 中,一些 STL 容器,如 vector、map、string 可以被带有冒号的 for 循环遍历。

例如:

for(auto c:v)

当我在编写自定义容器时,我可以让它像 Java 那样遍历(只需要实现 Iterable)?

Sor*_*rin 5

是的,您需要实现某种形式的迭代器并覆盖 std::begin(container) 和 std::end(container)(如果您的容器具有 begin 和 end 方法,也可能工作)。

在内部,代码等效于以下内容(这只是为了说明问题,编译器可以稍微不同地编写它,有关更多详细信息,请参见此处)。

auto _end = end(v);
for (auto _it = begin(v); _it != _end; ++_it) {  
    auto c = *_it;
    <the rest of loop code>
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您的迭代器和覆盖按预期工作,它也适用于 for 循环。