C++ 指向向量的向量
我试图实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我想通过第一个向量对向量的3值进行索引 我得到一些向量索引超出范围,我不明白为什么。 这是代码C++ 指向向量的向量,c++,containers,C++,Containers,我试图实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我想通过第一个向量对向量的3值进行索引 我得到一些向量索引超出范围,我不明白为什么。 这是代码 #include<iostream> #include<map> #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm&
#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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int n=2;
向量vec1;
对于(int i=0;ivar;
for(int i=0;inum;
向量推回(num);
}
vec1.向后推(&vec);
我不能;
cout>j;
自动新向量=向量1[i];
cout at(j);
系统(“暂停”);
返回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;
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
int n=2;
向量vec1;
对于(int i=0;i清除();
cout>var;
for(int i=0;inum;
向量->推回(num);
}
vec1.推回(vec);
我不能;
cout>j;
自动新向量=向量1[i];
cout at(j)*超出范围*值是由于for
循环的内的向量vec
和/或可能是i
和j
造成的
- 因此,要存储
指针
请使用指针
:使用类似于vector vec=new vector()
的内容
在您的实现中:在for
循环的末尾,变量vec
被删除,它的地址可能被另一个变量使用。因此,当您试图获取它的值时,很可能无法获取存储的内容
- 然后,确保当获得向量的
i
和j
时:i
介于0
和n-1
之间j
介于0
和var-1
之间
希望它能对你有所帮助。你一直在指向已经被销毁的vector
(在你的for
中创建和销毁)。@Stephen Newell你是wright我只是在播种它。但我仍然想不出一个方法来做我试图做的vec;
在for()中
循环作用域。所有引用地址都将在()循环已经完成。<代码> STD::向量< /代码>——为什么不使用这个?还是更好的是,<代码> STD::向量< /代码>,像2D数组那样管理它?而且,使用原始指针也不能使你成为一个更好的C++程序员,恕我直言。@保罗·麦肯齐,莱特。谢谢。