VIDTAKER.COM

Q&A

方法2にインクリメントイテレータを?


ハイ

誰でもどのようにインクリメントする反復子を2倍に教えてください。

ITERの+ +は入手可能です - 私はどのように私はこれを達成することができますITERの+2しなければならない。



5 Replies

1)

あなたはまた、'では、代入'演算子を使うことができます

iter += 2;

2)

std::advance( iter, 2 );

このメソッドは、ランダムアクセスイテレータはありませんが、それはまだ実装によってはより効率的に特化することができますイテレータに動作しますiter += 2ランダムアクセス反復子を使用するとき。


3)

http://www.cplusplus.com/reference/std/iterator/advance/

std::advance(it,n);

nは、あなたのケースでは2です。

この関数の美しさは、であること"それが"ランダムアクセスイテレータ、高速れている場合

it += n

操作は()すなわち、ベクトル<,,>::反復子を使用しています。それ以外の場合は、にレンダリング

for(int i = 0; i < n; i++)
    ++it;

(つまり、リスト<..>::反復子)


4)

非常に単純な答え:

++++iter

長い答え:

あなたは本当に書くことに慣れる必要があります++iter代わりにiter++ 。後者は(のコピー)の新しい値とは異なる古い値を返す必要がありますが、これは時間と空間をかかります。

そのプレフィックスをインクリメント(注 )一方、後置インクリメント(左辺値を返す左辺かかる )を左辺値を返します右辺かかります。


5)

あなたは天気がわからない場合は、コンテナかどうかの次の要素を十分にすると、各増分の間にコンテナの末尾に対してチェックする必要があります。どちらも+ +がないのstd::事前にあなたのためにそれを行います。

if( ++iter == collection.end())
  ... // stop

if( ++iter == collection.end())
  ... // stop

あなたも、あなた自身のバインド安全な事前関数をロールバックがあります。

あなたは、最後の過去、そして観光スポット一覧行かない::事前に(ITERの、2)最適なソリューションを確認している場合。