关于存储指向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
相关产品推荐
相关产品推荐

