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