【问题标题】:A list<> of integer arrays in C++?C ++中整数数组的列表<>?
【发布时间】:2014-10-08 03:23:04
【问题描述】:

我需要一个整数数组的动态列表。

我认为可以声明为:

list<int[10]> myListOfArrays; 

但这不起作用,编译器返回错误:

error: 'std::_list_node<_Tp>::_M_data' has incomplete type
error: invalid use of array with unspecified bounds

有没有办法做到这一点?

整数数组的大小不必是动态的,只有列表的数量。

【问题讨论】:

  • 你可以创建vector的vector或使其成为动态数组。
  • 您确定需要list 而不是vector
  • 对于这种大小的容器,我会像 juanchopanza 建议的那样选择vector

标签: c++ arrays list


【解决方案1】:

使用std::list 中的std::array&lt;int,10&gt;

【讨论】:

    【解决方案2】:

    list&lt;int*&gt; myListOfArrays; 会起作用,尤其是当您对具有静态大小的整数数组感到满意时。

    类似:

    std::list<int*> listOfArrays;
    
    int[10] intArray;
    
    listOfArrays.push_back(intArray);
    

    你真正做的是在你的列表中存储 int 指针。

    【讨论】:

    • 当数组超出范围时会发生什么,而不是std::list&lt;int *&gt;?将数组嵌入std::list(与std::array&lt;int,10&gt; 一样)会带来更好的安全性、更好的风格、更好的可维护性等等。
    • 此外,您无法从指针中知道它是指向单个元素还是数组的第一个元素。如果是后者,你不知道数组有多长。所以它真的很脆弱。
    • @RobertAllanHenniganLeahy 非常正确,但我保持简单。我不认为这是他/她正在处理的关键代码,否则他们可能一开始就不会问这个问题。他/她甚至说静态 int 数组就可以满足他们的目的,确切的长度是已知的。
    • 你的解决方案比std::list&lt;std::array&lt;int,10&gt;&gt;简单吗?
    • 据我所见, std::array 仍然只是“一维”吗?还是我错过了什么?基本上我需要的是一个沿一个轴具有动态大小的二维数组...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多