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

....

これまでに見つけた解決策の 1 つは、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 に答える