You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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个元素的需求完全不符,因此触发运算符不匹配的编译错误。
正确访问方案

两种写法均可正确访问目标元素:

  1. 先对指针解引用得到vector对象,再通过下标访问:(*main[j])[i]
  2. 调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:09:03