1. ホーム
  2. c++

[解決済み] 範囲指定型forループを使用する際のイテレータの必要性

2023-04-05 22:29:23

質問

現在、これを使ってレンジベースループしかできません。

for (auto& value : values)

しかし、時々、参照ではなく、値へのイテレータが必要になることがあります(何らかの理由で)。値を比較するためにベクトル全体を通過することなく、何らかの方法があるのでしょうか?

どのように解決するのですか?

古い for のようなループを使用します。

for (auto it = values.begin(); it != values.end();  ++it )
{
       auto & value = *it;
       //...
}

これで、あなたは value と同様にイテレータ it . 使いたいものを使ってください。


EDITです。

あまりお勧めはしませんが、範囲指定による for のループ(ええ。 何らかの理由で :D)であれば、このようにすることができます。

 auto it = std::begin(values); //std::begin is a free function in C++11
 for (auto& value : values)
 {
     //Use value or it - whatever you need!
     //...
     ++it; //at the end OR make sure you do this in each iteration
 }

この方法は,与えられた value であるため value であり it は常に同期しています。