考虑一个二维向量vector < vector <int> > N
,假设它的内容如下:
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
所以这里 N 的大小是 4 即N.size() = 4
现在,考虑以下代码:
int i = 0;
while(N != empty()){
N.erase(i);
++i;
}
我仅计算了这段代码的时间,N 的大小不同,结果如下:
N的大小为1000执行时间:0.230000s
N的大小为10000执行时间:22.900000s
N的大小为20000 执行时间:91.760000s
N的大小为30000 执行时间:206.620000s
N的大小为47895 执行时间:526.540000s
我的问题是为什么这个功能这么贵?如果是这样,那么许多程序中的条件擦除语句可能会因为这个功能而永远持续下去。我也使用擦除功能时std::map
也是如此。这个功能有没有替代品。像 Boost 这样的其他库有提供吗?
请不要说我可以做N.erase()
一个整体,因为我只是想分析这个功能。