我正在尝试实现一个指向其他向量的向量,而不是通过使用索引提取第二个向量的值。例如,我想通过在第一个向量中进行索引来索引向量的3个值;
我得到的矢量索引超出范围,我不明白为什么。 这是代码。
tr
我实际上是这样做的。但是我不知道这是否是一个好方法。我在堆中分配向量。
#include<iostream>
#include<map>
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n = 2;
vector <vector<int>*> vec1;
for (int i = 0; i < n; i++)
{
vector<int> vec;
vec.clear();
cout << "Enter number of var : ";
int var;
cin >> var;
for (int i = 0; i < var; i++)
{
cout << "Enter number : ";
int num ;
cin >> num;
vec.push_back(num);
}
vec1.push_back(&vec);
cout << "Container ends \n";
}
cout << "Enter i : ";
int i;
cin >> i;
cout << "Enter j : ";
int j;
cin >> j;
auto newvec = vec1[i];
cout << newvec->at(j);
system("pause");
return 0;
}
答案 0 :(得分:1)
*超出范围* 的值是由于vector<int> vec
循环内的for
和/或可能是由于i
和j
造成的。 / p>
pointer
,请使用pointer
:使用类似vector<int> vec = new vector<int>()
的东西。通过您的实现:在for
循环的末尾,变量vec
被删除,其地址可能被另一个变量使用。因此,当您尝试获取其价值时,很可能没有得到所存储的内容。
i
和j
时:i
在0
和n-1
之间。 j
在向量的0
和var-1
之间。希望它对您有帮助。