0

我有一个名为 Contact 的类,我想构建一个指向这些对象的指针数据结构,例如 127 行和 20 列的矩阵。我试图以这种方式使用 std::vector 类

std::vector < std::vector<Contact* > > matrix (127, std::vector < Contact* > (20));

然后,在标题中声明了以下内容

std::vector<std::vector<Contact* > > Buckets;

我将之前初始化和声明的矩阵分配给它(这一步是因为基本上我不知道如何以更清晰和简短的方式进行操作):

Buckets = matrix;

但使用 push_back 函数,如

Buckets[pot].push_back(cont_temp);

一段时间后会产生一个错误(“在抛出 'std::bad_alloc' 的实例后调用终止”),我不知道如何解决它。

还有其他更好的方法来实例化和初始化矩阵吗?您会建议其他解决方案而不是使用向量向量(boost::multiarray..?)?

谢谢(对不起这个愚蠢的问题,我是个穷学生:)

编辑:我发现了错误(只是一个超出范围的分配)。如果您对这种数据结构有一般性建议,我还在这里......

4

3 回答 3

2

当您说“一段时间后”时,这是什么意思?std::bad_alloc 表示您的内存不足。你有一个吞噬内存的循环吗?

于 2009-08-20T08:47:31.070 回答
0

如果您只想使用已知大小的二维矩阵,则可以使用简单的数组:

(Contact*) matrix[127][20];

当然,如果大小可以在编译后确定或更改,则此方法不起作用。在这种情况下,我建议您转向 boost 库,尤其是 multi_array。

有关简短示例,请参阅此处,或查看完整文档

typedef boost::multi_array<Contact*, 2> ContactContainer;
ContactContainer matrix(boost::extents[127][20]);
于 2009-08-20T11:34:54.493 回答
0

矩阵中的联系人是动态分配的吗?如果是这样,当你说:

Buckets = matrix;

你最终会得到两个指向同一个动态分配对象的指针,这只会导致麻烦。您应该使用智能指针向量,例如 Boost 的共享指针。

于 2009-08-20T08:46:13.227 回答