[英]c++: vector of vector issue
我編寫了一個C ++代碼,用於測試矢量push_back的運行時間。 我有向量的向量。 我稱我的主向量mainVec和嵌入式向量subVec。 因此,我將2 ^ 20個元素推入subVec中,然后將subVec 2 ^ 20個推入mainVec中。 但是,在subVec-push_back循環中,我有一個cout命令,該命令未執行。 我希望您能指出我的錯誤。
這是代碼(盡管代碼中沒有錯誤):
vector<int> subVec;
vector< vector<int> > mainVec;
//Fills the subvector with 2^20 elements
for( size_t i = 0; i < (pow(2,20)+1); ++i) subVec.push_back(i);
//Filling of the maiVec with 2^20 subVec
for( size_t j = 10; j < 21; ++j) {
cout << pow(2,j) << endl;
clock_t t1 = clock();
//2^j times subVec is push_backed for j < 21
for( size_t k = 0; k < pow(2,j); ++k ) mainVec.push_back( subVec );
t1 = clock()-t1;
//Outputting to file
cout << "\t" << (float(t1) / CLOCKS_PER_SEC) << endl;
//ofs << pow(2,j) << "\t\t" << (float(t1) / CLOCKS_PER_SEC) << endl;
}
您的代碼有幾個問題。
首先,您不需要在第一個循環中使用+1
。 pow(2,20)+1
。 由於您從0開始並且想要2 ^ 20次,因此需要做直到i<2^20
。
其次,最好在循環之前計算pow
,否則每次都會計算它們,這可能會永遠花費。
第三,您可以執行1<<j
而不是pow(2,j)
。 僅供參考。
第四,也是最重要的一點,我們在這里談論的內存數量過大。 即使是最小的循環也要執行2 ^ 30整數,即4GB內存。 我的猜測是您的程序正在殺死您的計算機,並且它從不打印第二個cout
的原因是它沒有到達那里(因為它正在嘗試使用交換文件作為內存)。 嘗試使用較小的數字,例如第一個循環為2 ^ 10,並查看是否獲得輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.