我正在尝试实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我希望通过对第一个向量进行索引来索引向量的3值;
我得到了一些向量索引超出范围,我不明白为什么。下面是代码。
#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;
}
我实际做的是这样的。但我不知道这是不是一个好方法。我在堆中分配向量。
#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 = new vector<int>;
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) << endl;;
system("pause");
return 0;
}
发布于 2019-06-03 00:43:18
*超出范围*值是由于for
循环中的vector<int> vec
和/或i
和j
造成的。
因此,要存储pointer
,请使用类似于
pointer
:pointer
对于您的实现:在for
循环的末尾,变量vec
被删除,它的地址可能被另一个变量使用。因此,当您尝试获取它的值时,很可能得不到您存储的内容。
然后,在获取i
和j
时,确保:i
介于0
和n-1
之间。j
位于矢量的0
和var-1
之间。
希望能对你有所帮助。
https://stackoverflow.com/questions/56416678
复制相似问题