簡體   English   中英

C ++:向量問題向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM