6

我找不到任何人为的解释:如何创建一个列表数组,如

std::list<int> mylist[size] ?

如果我把它放在我的程序中,它会编译但会产生一些问题,因为它不执行任何代码(如果我写 mylist w/out [size],其余代码工作得很好)

我在某处读到不推荐使用 C 的原始数组;有哪些选择?

谢谢你的新意

4

6 回答 6

11

您的声明不正确,并且在 C++ 中不受支持。您试图在运行时声明一个可变大小的数组,这是 C99 的一项功能,但不在 C++ 中。请参阅此处:允许运行时没有动态分配的数组大小?

你有这个:

std::list<int> mylist[size]

你需要的是这样的:

std::list<int> mylist[] = new std::list<int>[size];

但这仍然是一个坏主意,因为您需要稍后使用delete []. 正如其他人所说,您可以通过几种不同的方式进行操作,所有这些方式都更适合 C++:

std::list< std::list< int > > myListOfLists;      // Linked list of linked lists
std::vector< std::list< int > > myVectorOfLists;  // Better, a vector is more like an array
std::array<std::list<int>, 10> this_would_do;     // From above, only works if you know the array size at compile-time

我希望这对您有所帮助并且很清楚。

于 2013-07-27T13:09:35.560 回答
5

进一步来说,

#include <array>
#include <list>

int main() {
     std::array<std::list<int>, 10> this_would_do;
}
于 2013-07-27T12:50:00.673 回答
2
//Codes                               // |  Being Human
typedef list<int> L;                  // |  L is now "alias" for list of integers 
const int arr_size=100;               // |  array needs a constant size, list don't
array<L,arr_size> myArrayOfList;      // |  An Array as elements L
list<L> myListOfList;                //  |  A List of elements L 

//A STL list is doubly linked list
于 2013-07-27T12:51:06.770 回答
1

Vector可以很好地替代 C 数组:

#include <vector>
...
std::vector<std::list<int> > vectorOfLists;
于 2013-07-27T12:53:43.417 回答
0

如果您实际上有一个固定大小(例如,您有一个“分数”为 0-9 的项目列表),那么使用固定大小的数组就可以了:

std::list<item> scored_items[10]; 

当然,如果你事先不知道你真正想要多少,这是一个糟糕的主意。那么要么std::list < std::list < item > > myLists;或向量std::vector < std::list < item> my_lists;将是合适的解决方案。

“正确”的解决方案取决于您的最终目标是什么。

于 2013-07-27T12:53:03.150 回答
0

声明列表的语法如下

std::list<T> my_list;

T 是任何类型的占位符,包括另一个列表,因此您可以将 T 替换std::list<int>为给出以下内容

std::list<std::list<int>> my_list;

这声明了一个可以容纳可以容纳整数的列表的列表。请注意,某些编译器可能会抱怨>>,在这种情况下将其更改为> >

于 2013-07-27T13:00:23.110 回答