c ++:矢量问题的向量

时间:2013-09-29 01:18:01

标签: c++ vector push back

我写了一个c ++代码,我正在测试vector 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 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。

首先,在第一个循环中不需要+1,即。 pow(2,20)+1。由于你从0开始并且你想要2 ^ 20次,你需要做到i<2^20

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

第三,您可以1<<j代替pow(2,j)。仅供参考。

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