C++ 访问矢量内的成对元素
C++ Access an element of pair inside vector
>我有一个向量,每个元素都是一对。我对语法感到困惑。有人可以告诉我如何迭代每个向量,进而迭代每个元素以访问该类。
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
子对象的x
和y
引用pts
内部的原始对,可以通过这种方式进行修改(例如 cin
可用于输入)。如果没有&
,e
将是一个副本(x
和y
再次引用的子对象)。使用VectorOfPairs
的示例:
for (auto [pFirst, pSecond] : VectorOfPairs ) {
// ...
}
此外,当不需要通过结构化绑定进行修改并且您希望避免潜在的昂贵一对副本时,您可以e
引用 const(尽管这在您的情况下应该不是问题,因为由 2 个指针组成的对对象非常小且复制成本低)。例:
for (const auto& [pFirst, pSecond] : VectorOfPairs ) {
// ...
}
相关文章:
- 使用不带参数的函数访问结构元素
- 我想访问std::unique_ptr中的一个特定元素
- 访问类lintalizer列表中的结构元素
- 从C++中的对列表中访问特定元素
- 访问动态分配列表中的元素
- 如何从静态向量访问类元素?
- 以C++访问矢量中的地图元素
- 映射基于自动的循环单元素访问C++
- 用元组作为C 的元素访问元组
- 元素访问(获取和放置)在C++中使用 std::vector
- 在Haskell中使用O(1)元素访问实现高效的类似拉链的数据结构
- std::map - 无异常且无需插入的元素访问
- C++2D矢量声明和来自调试器的元素访问
- 迭代器性能的重点应该放在高级还是元素访问上
- groot集合-元素访问
- 矩阵元素访问
- 对于boost::hana::tuple,元素访问的时间复杂度是多少?
- c++向量元素访问
- 通用容器和可变元素访问
- std::vector中的每个元素访问都是缓存未命中吗