7

各要素がペアであるベクトルがあります。構文がわかりません。誰かが各ベクトルを反復処理し、次にペアの各要素を繰り返してクラスにアクセスする方法を教えてもらえますか?

    std::vector<std::pair<MyClass *, MyClass *>> VectorOfPairs;

また、関数の間に値を渡すことに注意してください。したがって、VectorOfPairsは、コードの一部の場所で*VectorOfPairsであるポインターによって渡されます。

あなたの助けに感謝。ありがとう

4

3 に答える 3

12

これは機能するはずです(C ++ 11互換のコンパイラがあると仮定します)

for ( auto it = VectorOfPairs.begin(); it != VectorOfPairs.end(); it++ )
{
   // To get hold of the class pointers:
   auto pClass1 = it->first;
   auto pClass2 = it->second;
}

お持ちでない場合は、代わりautoに使用する必要があります。std::vector<std::pair<MyClass *, MyClass *>>::iterator

于 2012-10-08T16:04:55.150 に答える
10

これがサンプルです。typedefを使用して、長くて醜いtypenameのエイリアスを作成していることに注意してください。

typedef std::vector<std::pair<MyClass*, MyClass*> > MyClassPairs;

for( MyClassPairs::iterator it = VectorOfPairs.begin(); it != VectorOfPairs.end(); ++it )
{
  MyClass* p_a = it->first;
  MyClass* p_b = it->second;
}
于 2012-10-08T16:04:33.543 に答える
5

C++11 準拠のコンパイラを使用している場合のさらに別のオプションは、範囲ベースのforループを使用することです

for( auto const& v : VectorOfPairs ) {
  // v is a reference to a vector element
  v.first->foo();
  v.second->bar();
}
于 2012-10-08T16:08:48.483 に答える