2013-09-29 103 views
0

我寫了一個C++代碼,我在測試向量push_back的運行時間。我有一個矢量矢量。我打電話給我的主矢量mainVec和嵌入矢量subVec。所以,我推送2^20元素到subVec中,然後將支持的subVec 2^20次推入mainVec。但是,在subVec-push_back的循環中,我有一個不能執行的cout命令。我希望你能指出我的錯誤。C++:向量問題向量

下面是代碼(沒有錯誤代碼,雖然):

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

爲什麼2^20? 'cout'對2^20-1是否正常工作? *簡化。* – Beta

+1

2^20整數的2^20個向量?你有超過4太字節的內存? –

+0

哈哈沒關係的人。我改變了我的程序只有兩個循環。第二個上升到2^8。 –

回答

0

有你的代碼的幾個問題。

首先,您不需要第一個循環中的+1,即。 pow(2,20)+1。既然你從0開始,你想要2^20次,你需要做的,直到i<2^20。其次,最好在循環之前計算pow,否則每次都會計算它們,這可能需要花費很長時間。

第三,你可以做1<<j而不是pow(2,j)。只是FYI。

第四,最重要的是,我們在此討論大量的記憶。即使你最小的循環做2^30整數,這是4GB的內存。我的猜測是你的程序只是在殺死你的電腦,而它從不打印第二個cout的原因是它沒有到​​達那裏(因爲它試圖使用交換文件作爲內存)。嘗試使用較小的數字,例如2^10作爲第一個循環,然後查看是否獲得輸出。

+0

謝謝,我不在乎程序計算pow的時間,因爲我對此不感興趣。我只對push_back subVec花費的時間感興趣。 –

+0

但您的評論是有幫助的。我現在只有兩個循環,第二個循環小於2^8,我認爲它仍然很大lol –

+0

@Cheetahjimi 2^8只有256,這很小。但第一個循環有多大?還是2^20?如果是這樣,請嘗試製作2^10。只是爲了看看你是否得到了輸出。 – rabensky