【发布时间】:2019-06-02 16:02:20
【问题描述】:
我正在尝试实现一个指向其他向量的向量,而不是通过使用索引来提取第二个向量的值。例如,我想通过第一个向量索引一个向量的 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;
}
【问题讨论】:
-
您保留指向已被销毁的
vector的指针(在您的for中创建和销毁)。 -
@Stephen Newell 你说得对,我只是播种。但我仍然想不出一种方法来做我想做的帽子
-
vector<int> vec;在for()循环范围内。在for()循环完成后,所有引用地址都将悬空。 -
std::vector<std::vector<int>>-- 不使用这个的原因是什么?或者更好的是,std::vector<int>并像二维数组一样管理它?而且,使用原始指针不会让你成为更好的 C++ 程序员,恕我直言。 -
@PaulMcKenzie 你很聪明。谢谢
标签: c++ containers