0

我编写了一个 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;
}
4

1 回答 1

0

您的代码有几个问题。

首先,您不需要+1在第一个循环中,即。pow(2,20)+1. 由于您从 0 开始并且想要 2^20 次,因此您需要执行 until i<2^20

其次,最好pow在循环之前计算 s,否则它会每次都计算它们,这可能需要很长时间。

第三,你可以做1<<j而不是pow(2,j). 仅供参考。

第四,也是最重要的,我们在这里谈论的是大量的内存。即使是最小的循环也在执行 2^30 个整数,即 4GB 内存。我的猜测是您的程序只是在杀死您的计算机,它从不打印第二个的原因cout是它没有到​​达那里(因为它试图使用交换文件作为内存)。尝试使用较小的数字,例如 2^10 用于第一个循环,看看是否得到输出。

于 2013-09-29T01:31:29.173 回答