C++访问vector中的pair元素

Rom*_*aan 7 c++ containers vector

我有一个向量,每个元素都是一对.我对语法很困惑.有人可以告诉我如何遍历每个向量,然后依次对每个元素进行访问.

    std::vector<std::pair<MyClass *, MyClass *>> VectorOfPairs;
Run Code Online (Sandbox Code Playgroud)

另外,请注意,我将传递函数之间的值,因此VectorOfPairs与我的代码的某些地方的*VectorOfPairs指针一起传递.

感谢您的帮助.谢谢

Ben*_*enj 11

这应该工作(假设你有一个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;
}
Run Code Online (Sandbox Code Playgroud)

如果你没有,auto你将不得不使用std::vector<std::pair<MyClass *, MyClass *>>::iterator.

  • 我理解为什么将`auto`添加到语言中的原因.我不得不在必要时使用它.我只是觉得在不需要时使用`auto`有点懒,可能会让一代程序员不知道他们在做什么.不过,我怀疑我对这个意见很满意. (2认同)

Joh*_*ing 9

这是一个例子.注意我使用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;
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*ian 5

如果您拥有符合C++ 11的编译器,则另一个选项是使用基于范围的for循环

for( auto const& v : VectorOfPairs ) {
  // v is a reference to a vector element
  v.first->foo();
  v.second->bar();
}
Run Code Online (Sandbox Code Playgroud)