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

关于存储指向int类型vector的指针的技术求助

问题分析与修正代码

首先明确:完全可以存储指向vector<int>的指针,也能定义指向这类指针的指针,但你的代码存在几个关键错误:

代码中的核心问题

  • 存储容器类型错误:vector <int*> ar; 应该改为vector<vector<int>*> ar;,因为你要存的是指向vector<int>的指针,而非指向int的指针。
  • 野指针未初始化:vector<int>* vec; 是未初始化的野指针,直接解引用会触发未定义行为,必须先分配实际的vector<int>对象。
  • 错误的指针运算:*(vec+j) 把单个指针当成数组首地址来用,逻辑完全错误,直接用*vec访问对应的vector即可。
  • 输入读取错误:cin.get()会读取输入流中的任意字符(包括换行、空格),应该用cin >>来读取整数。
  • 类型不匹配:ar.push_back(&(vec)); 中&vec是vector<int>**类型,和容器的vector<int>*类型不匹配,直接传入vec即可。

修正后的代码

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, q;
    cin >> n >> q;
    // 存储指向vector<int>的指针的容器
    vector<vector<int>*> ar;

    for (int i = 0; i < n; i++) {
        int k;
        cin >> k;
        // 分配一个新的vector<int>对象,让vec指向它
        vector<int>* vec = new vector<int>();

        for (int j = 0; j < k; j++) {
            int num;
            cin >> num;
            // 向vec指向的vector中添加元素
            vec->push_back(num);
        }
        // 将指针存入容器
        ar.push_back(vec);
    }

    // 示例:遍历容器中的指针并输出内容
    for (auto vec_ptr : ar) {
        for (int num : *vec_ptr) {
            cout << num << " ";
        }
        cout << endl;
        // 记得用完后释放内存,避免内存泄漏
        delete vec_ptr;
    }
    ar.clear();
    return 0;
}

注意事项

  • 用new分配的vector需要手动用delete释放,否则会造成内存泄漏。如果不想手动管理内存,可以考虑用std::unique_ptr<vector<int>>或std::shared_ptr<vector<int>>来自动管理生命周期。
  • 如果尝试定义指向这类指针的指针(即vector<int>**),也是可行的,比如:
    vector<int>* vec = new vector<int>();
    vector<int>** ptr_to_ptr = &vec;
    // 访问方式:(*ptr_to_ptr)->push_back(10);
    

内容的提问来源于stack exchange,提问作者Derteck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:15:38