C++ 访问矢量内的成对元素

C++ Access an element of pair inside vector

本文关键字:元素 访问 C++      更新时间:2023-10-16

>我有一个向量,每个元素都是一对。我对语法感到困惑。有人可以告诉我如何迭代每个向量,进而迭代每个元素以访问该类。

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

另外,请注意,我将在函数之间传递值,因此 VectorOfPair 通过指针传递,该指针在我的代码的某些位置是 *VectorOfPairs。

感谢您的帮助。谢谢

应该可以工作(假设您有一个兼容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

下面是一个示例。 注意我正在使用 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;
}

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

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

您可以通过结合基于范围的for循环和结构化绑定,以以下样式访问 vector C++17中 vector 中的对元素。例:

for (auto& [x, y] : pts) {
    cin >> x >> y;
}

其中pts是成对的向量。 &用于使结构化绑定的正式"唯一命名变量"e成为引用,以便引用e子对象的xy引用pts内部的原始对,可以通过这种方式进行修改(例如 cin可用于输入)。如果没有&e将是一个副本(xy再次引用的子对象)。使用VectorOfPairs的示例:

for (auto [pFirst, pSecond] : VectorOfPairs ) {
    // ...
}

此外,当不需要通过结构化绑定进行修改并且您希望避免潜在的昂贵一对副本时,您可以e引用 const(尽管这在您的情况下应该不是问题,因为由 2 个指针组成的对对象非常小且复制成本低)。例:

for (const auto& [pFirst, pSecond] : VectorOfPairs ) {
    // ...
}