【问题标题】:Error for different type of list declaration in STL c++STL c ++中不同类型的列表声明的错误
【发布时间】:2019-10-11 11:20:37
【问题描述】:
list<int>L[]=new list<int>[20];

这给出了一个错误“数组初始值设定项必须是初始值设定项 列表” 初始化列表有什么问题:

list&lt;int&gt; L[100];

list[] L 也有任何含义

list&lt;int&gt; *L=new list&lt;int&gt;[20] 为什么会这样?

如果可能的话,请给我简要解释每个案例,因为我是 STL 新手

【问题讨论】:

  • 1) 不要这样做,使用std::array&lt;std::list&lt;int&gt;, 20&gt;(静态分配)或std::vector&lt;std::list&lt;int&gt;&gt;(更改列表数量的能力)2) 如果你真的想试试有点奇怪,new 将内存分配给一个指针(简而言之),你还需要在之后调用delete[] L。你的第一次尝试是错误的。
  • 您能详细说明您要做什么吗?您是要存储ints 的一个 列表,还是需要int20 列表?也很可能不需要手动分配内存。基本的 list&lt;int&gt;vector&lt;int&gt; 甚至 list&lt;list&lt;int&gt;&gt; 应该适合你。
  • @alterigel 我正在尝试创建邻接列表。我需要初始化一个列表数组,列表的大小稍后给出
  • @mathnormie 啊,好的。这里的正常方法是使用vector&lt;vector&lt;int&gt;&gt;

标签: c++ list stl


【解决方案1】:

new list&lt;int&gt;[20] 动态分配一个包含 20 个list&lt;int&gt; 对象的数组,并返回一个list&lt;int&gt;* 指针。所以你需要一个list&lt;int&gt;* 变量来接收那个指针:

list<int> *L = new list<int>[20];
...
delete[] L;

list&lt;int&gt; L[] 没有声明指针,它声明了一个未指定大小的静态数组。您唯一可以分配给它的是包含所需数组元素的初始化列表,因此编译器可以推断出数组的大小:

list<int> L[] = {a_list_object, another_list_object, ...};

list&lt;int&gt; L[100]; 声明了一个包含 100 个 list&lt;int&gt; 对象的静态数组。不涉及指针。

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 2022-11-16
    • 2011-09-29
    • 2010-10-10
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多