アルゴリズム分析を行うために乱数の膨大なコレクションを作成しようとしています。その後、説明できないこの問題に遭遇しました。次のコードを検討してください。
#include <exception>
#include <iostream>
#include <deque>
typedef unsigned long long mytype;
const mytype SIZE = 150000000;
int main()
{
std::deque<mytype> rand;
try
{
for (mytype i = 0; i< SIZE; i++)
{
rand.push_back(1); //Just push a dummy number into the deque
}
}
catch (std::exception& e)
{
{
std::cout << e.what() << std::endl;
}
}
return 0;
}
これにより、不適切な割り当て例外が発生します。問題は、 vector と reserve() を使用すると機能することです。ベクトルのようにメモリを連続的に割り当てないため、deque はより大きな容量を持つ種類のデータ構造ではありませんか?
私はこれをWin8 x64、Visual Studio 2012、8G RAMを搭載したIntel i7で実行しています。あなたの考えを共有してくれてありがとう