问题是在数据集中找到周期性图形模式。所以我有 1000 个时间步长,每个时间步长都有一个图表(编码为整数)。因此,该图可能出现 999 个可能的周期。我还定义了一个相位偏移,定义为(时间步模周期)。对于在周期为 2 的第 5 个时间步长中首次出现的图,相位偏移为 1。
我正在尝试用 C++ 创建一个二维列表数组。每个单元格包含一个列表,其中包含具有指定周期和相位偏移的图形。我不断在相应的列表中插入图表。
list<ListNode> A[timesteps][phase offsets]
ListNode
是一个有 4 个整型变量的类。
这给了我分段错误。使用 500 作为大小运行良好。这是由于内存不足还是其他问题?
Thanks.
可能是由于堆栈大小有限。
您正在创建一个由 1000x1000 = 1000000 个对象组成的数组,几乎可以肯定每个对象至少有 4 个字节,因此至少大约为 4 MB。假设它在一个函数内部,它将是auto
存储类,通常翻译为在堆栈上分配。典型的堆栈大小约为 1 到 4 MB。
尝试类似的方法:std::vector<ListNode> A(1000*1000);
(并且,如有必要,创建一个包装器以使其看起来是二维的)。
编辑:包装器将重载一个运算符来为您提供 2D 寻址:
template <class T>
class array_2D {
std::vector<T> data;
size_t cols;
public:
array_2D(size_t x, size_t y) : cols(x), data(x*y) {}
T &operator()(size_t x, size_t y) { return data[y*cols+x]; }
};
您可能想对其进行修饰(例如,使用边界检查),但这就是总体思路。解决它会使用()
, as in:
array_2d<int> x(1000, 1000);
x(100, 3) = 2;
y = x(20, 20);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)