3

我在玩范围循环,例如:

for (auto i : range) {

这相当于

auto it = range.begin();
auto i = *it;

但我想要的是:

for (auto it : range) {
    *it; // the it var is not derefernced by range loop

有没有办法做到这一点?也许是这样的:

for (auto it : make_range(range)) {
    *it; // the it var is not derefernced by range loop

……

到目前为止,我发现的一种解决方案是使用 boost::irange,例如:

for (auto it : irange(range.begin(), range.end())) {
4

1 回答 1

4

for-range 循环的全部目的是遍历容器的内容。所以不,没有本地方法可以访问循环使用的迭代器。如果你需要,你不应该一开始就使用 for-range 循环。在 for-range 循环中访问容器迭代器的唯一选择是编写一个自定义适配器类,该类包装容器并公开其自己的迭代器,这些迭代器在取消引用时返回容器迭代器。然后你直接遍历适配器而不是容器。

于 2012-11-15T04:07:58.483 回答