Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向向量的向量_C++_Containers - Fatal编程技术网

C++ 指向向量的向量

C++ 指向向量的向量,c++,containers,C++,Containers,我试图实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我想通过第一个向量对向量的3值进行索引 我得到一些向量索引超出范围,我不明白为什么。 这是代码 #include<iostream> #include<map> #include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm&

我试图实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我想通过第一个向量对向量的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;
    }

#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间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++程序员,恕我直言。@保罗·麦肯齐,莱特。谢谢。