繁体   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