使用C++和STL,有人知道如何将整数数组作为节点存储在STL列表或 vector 中吗?我需要存储的数字对的数量未知,并且来自其他语言,我的第一个念头是使用某种类似于列表或 vector 的数据结构...但是我遇到了麻烦。我100%地确定自己犯了一个明显的初学者C++错误,并且真正了解该语言的人会看到我正在尝试做的事情,并且能够使我直截了当。

所以,这就是我尝试过的。像这样声明一个列表:

stl::list<int[2]> my_list;

然后,我可以轻松地制作一个包含两个元素的数组,如下所示:
int foo[2] = {1,2};

这样可以编译运行。但是,一旦我尝试将foo添加到我的列表中,就像这样:
my_list.push_back(foo);

我遇到了一系列令人讨厌的编译器错误,我都不是真正理解的(我的C++-fu几乎不存在):
/usr/include/c++/4.0.0/ext/new_allocator.h: In member function ‘void __gnu_cxx::new_allocator<_Tp>::construct(_Tp*, const _Tp&) [with _Tp = int [2]]’:
/usr/include/c++/4.0.0/bits/stl_list.h:440:   instantiated from ‘std::_List_node<_Tp>* std::list<_Tp, _Alloc>::_M_create_node(const _Tp&) [with _Tp = int [2], _Alloc = std::allocator<int [2]>]’
/usr/include/c++/4.0.0/bits/stl_list.h:1151:   instantiated from ‘void std::list<_Tp, _Alloc>::_M_insert(std::_List_iterator<_Tp>, const _Tp&) [with _Tp = int [2], _Alloc = std::allocator<int [2]>]’
/usr/include/c++/4.0.0/bits/stl_list.h:773:   instantiated from ‘void std::list<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int [2], _Alloc = std::allocator<int [2]>]’
test.cpp:5:   instantiated from here
/usr/include/c++/4.0.0/ext/new_allocator.h:104: error: ISO C++ forbids initialization in array new

那么,有人对我在这里做错什么有想法吗?任何指针(无双关语)将最有帮助。只是不可能将数组存储在std::list中吗?我应该使用结构吗?我只是在某个地方缺少*&吗?

最佳答案

您不能在STL容器中存储阵列。一般情况下,您可以使用 vector 的 vector 或类似的 vector 。对于您的特定情况,我将使用std::pair的 vector ,例如:std::vector<std::pair<int, int> >std::pair是一个具有两个成员的类,firstsecond,无论您将其模板化为哪种类型。

编辑:我本来是std::vector<std::pair<int> >,但是在两种类型相同的情况下,我不确定它是否被重载以仅接受一个参数...一点点挖掘都没有发现这一点,所以我修改了它明确声明firstsecond均为int

关于c++ - 如何在STL列表中存储阵列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/826935/

10-16 22:47