使用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
是一个具有两个成员的类,first
和second
,无论您将其模板化为哪种类型。
编辑:我本来是std::vector<std::pair<int> >
,但是在两种类型相同的情况下,我不确定它是否被重载以仅接受一个参数...一点点挖掘都没有发现这一点,所以我修改了它明确声明first
和second
均为int
。
关于c++ - 如何在STL列表中存储阵列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/826935/