指向向量的向量

时间:2019-06-02 16:02:20

标签: c++ containers

我正在尝试实现一个指向其他向量的向量,而不是通过使用索引提取第二个向量的值。例如,我想通过在第一个向量中进行索引来索引向量的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;
    }

1 个答案:

答案 0 :(得分:1)

*超出范围* 的值是由于vector<int> vec循环内的for和/或可能是由于ij造成的。 / p>

  • 因此,要存储pointer,请使用pointer:使用类似vector<int> vec = new vector<int>()的东西。

通过您的实现:在for循环的末尾,变量vec被删除,其地址可能被另一个变量使用。因此,当您尝试获取其价值时,很可能没有得到所存储的内容。

  • 然后,确保获得ij时:i0n-1之间。 j在向量的0var-1之间。

希望它对您有帮助。