我有一个问题,我正在处理我需要使用某种二维数组的地方。该数组是固定宽度(四列),但我需要动态创建额外的行。
为此,我一直在使用向量的向量,并且一直在使用一些包含以下内容的嵌套循环:
array.push_back(vector<float>(4));
array[n][0] = a;
array[n][1] = b;
array[n][2] = c;
array[n][3] = d;
n++
添加行及其内容。问题是我试图创建的元素数量似乎已经耗尽了内存,所以我减少了我正在使用的数量。但后来我开始阅读关于双端队列的内容,并认为它可以让我使用更多的内存,因为它不必是连续的。在这个循环中,我将所有提到的“vector”以及所有声明都更改为“deque”。但后来似乎我的内存又用完了,这一次即使行数减少了。
我查看了我的代码使用了多少内存,当我使用双端队列时,内存稳步上升到 2GB 以上,并且程序很快关闭,即使使用较少的行数也是如此。我不确定内存不足时该循环的确切位置。
当我使用向量时,即使循环退出,内存使用量(对于相同数量的行)仍然低于 1GB。然后它继续进行类似的循环,其中添加了更多行,但仍仅达到约 1.4GB。
所以我的问题是。这对于双端队列使用超过向量两倍的内存是正常的,还是我在认为我可以在声明/初始化和上述代码中将“向量”一词替换为“双端队列”时做出错误的假设?
提前致谢。
我正在使用:MS Visual C++ 2010(32 位)Windows 7(64 位)