C++中vector<vector<int>*>实现矩阵访问元素报operator*错误如何解决
错误原因
你定义的main容器类型为std::vector<std::vector<int>*>,存储的每个元素都是指向std::vector<int>的指针:
main[j]取到的是std::vector<int>*类型的指针,而非std::vector<int>对象- 你编写的
main[j][i]会被编译器解析为对指针做偏移后解引用,等价于*(main[j] + i),相当于尝试取指针指向地址偏移i个std::vector<int>长度后的对象,和你要访问第j个vector的第i个元素的需求完全不符,因此触发运算符不匹配的编译错误。
正确访问方案
两种写法均可正确访问目标元素:
- 先对指针解引用得到vector对象,再通过下标访问:
(*main[j])[i] - 调用vector的
at()成员方法访问:main[j]->at(i)
修改后的输出循环代码如下:
for(int j=0; j<3; j++){ for(uint32_t i=0; i<main[j]->size(); i++) std::cout<< (*main[j])[i] <<" "; cout<<"\n"; }
额外优化建议
- 当前代码通过
new申请的vector对象没有对应释放逻辑,会存在内存泄漏,建议在程序退出前遍历释放所有指针指向的内存:
// return 0 前添加释放逻辑 for (auto vec_ptr : main) { delete vec_ptr; }
- 如果没有特殊需求,完全可以直接用二维vector实现矩阵,不需要存储指针,定义改为
std::vector<std::vector<int>> main即可,不需要手动管理内存,访问语法也更简洁,直接使用main[j][i]就能访问对应元素。
内容的提问来源于stack exchange,提问作者ShAd
相关产品推荐
相关产品推荐

