7

我有一个向量,每个元素都是一对。我对语法感到困惑。有人可以告诉我如何遍历每个向量,然后依次遍历 pair 的每个元素来访问该类。

    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 为那个又长又丑的类型名取别名:

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 回答