C++如何访问二维vector类型指针指向的单个元素?
C++指向vector的指针元素访问问题解决
错误原因
base operand of ‘->’ has non-pointer type ‘std::vector<Edges<int> >’
出现该报错的核心原因是指针层级混淆:
ptr是指向整个vector容器的指针,不是指向Edges元素的指针,也不是二维指针/指针数组ptr[0]等价于*ptr,解引用后拿到的是std::vector<Edges<int>>类型的容器对象本身,容器对象不是指针类型,自然不能用->访问成员
正确访问方式
有两种常用的等价正确写法:
写法1:先解引用指针拿到容器,再访问元素
因为[]运算符优先级高于解引用*,必须加括号保证先解引用ptr:
// 访问第0个Edges元素的u成员 int u = (*ptr)[0].u; // 访问第1个Edges元素的w成员 int w = (*ptr)[1].w;
写法2:用->调用vector的成员方法/重载运算符
指针可以直接用->访问指向对象的成员,包括vector重载的[]运算符、at()方法:
// 用->调用重载的[]运算符 int v = ptr->operator[](2).v; // 用at方法访问,自带下标越界检查,安全性更高 int u = ptr->at(0).u;
完整可运行测试代码
#include <vector> #include <iostream> using namespace std; template<class T> struct Edges{ T u,v; int w; }; int main(int argc, char const *argv[]){ vector<struct Edges<int>> *ptr = new vector<struct Edges<int>>( {{1,2,1},{1,3,1}, {2,3,1}} ); // 测试访问 cout << (*ptr)[0].u << endl; // 输出1 cout << ptr->at(1).w << endl; // 输出1 cout << ptr->operator[](2).v << endl; // 输出3 // 手动释放堆内存避免泄漏 delete ptr; return 0; }
内容的提问来源于stack exchange,提问作者Suvasish das
相关产品推荐
相关产品推荐

