首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >向量指向向量

向量指向向量
EN

Stack Overflow用户
提问于 2019-06-03 00:02:20
回答 1查看 94关注 0票数 -2

我正在尝试实现一个指向其他向量的向量,然后使用索引提取第二个向量的值。例如,我希望通过对第一个向量进行索引来索引向量的3值;

我得到了一些向量索引超出范围,我不明白为什么。下面是代码。

代码语言:javascript
复制
#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;
    }

我实际做的是这样的。但我不知道这是不是一个好方法。我在堆中分配向量。

代码语言:javascript
复制
#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;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-03 00:43:18

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

因此,要存储pointer,请使用类似于

  • pointerpointer

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

然后,在获取ij时,确保:i介于0n-1之间。j位于矢量的0var-1之间。

希望能对你有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56416678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档