多维列表c ++ STL列表

问题描述 投票:-4回答:4

这个简单程序有什么问题。我想创建多列表并使用c ++ STL插入。其给定的分割错误。

enter image description here

#include <iostream>
#include <list>
using namespace std;
int main(){
        list<int> *l;
        l[0].push_back(1);
        l[10].push_back(12);
        cout<<endl;
        return 0;
}
c++ stl
4个回答
3
投票

您为什么使用指向列表的指针?您没有为列表分配内存。您可以使用一个容器存储多个列表,例如std:array表示元素的静态数量,std :: vector表示元素的动态数量:

#include <array>
#include <iostream>
#include <list>
#include <vector>
using std::array;
using std::vector;
using std::list;
using std::cout;

int main(){
        std::array<list<int>, 11> l;
        l[0].push_back(1);
        l[10].push_back(12);


        std::vector<list<int>> l2(11);
        l2[0].push_back(1);
        l2[10].push_back(12);
        cout << '\n';
        return 0;
}

1
投票

[list<int> *l;使l成为指向list<int>的指针,但实际上并没有创建list<int>-绝对不是您要访问的list<int>的数组。

可能的解决方案。

[C0的普通C固定大小的数组:

list<int>

使用C ++固定大小的std :: array:

#include <iostream>
#include <list>

int main() {
    std::list<int> l[11];            // place for 11 list<int>`'s
    l[0].push_back(1);
    l[10].push_back(12);
}

使用允许动态添加更多#include <array> #include <list> int main() { std::array<std::list<int>, 11> l; // place for 11 list<int>'s l[0].push_back(1); l[10].push_back(12); } 的C ++ std::vector

list<int>

0
投票

#include <list> #include <vector> int main() { std::vector<std::list<int>> l(11); // starts with place for 11 list<int>'s l[0].push_back(1); l[10].push_back(12); } 是指向列表的指针,它没有初始化,因此向其中添加元素具有未定义的行为。


0
投票

list<int> *l;中正在创建指向list<int> *l;的指针。在访问list之前,您需要为其分配有效地址。

类似这样的东西,

l
© www.soinside.com 2019 - 2024. All rights reserved.