我有一个嵌套的for循环结构,现在我在每次迭代开始时重新声明向量:
void function (n1,n2,bound,etc){
for (int i=0; i<bound; i++){
vector< vector<long long> > vec(n1, vector<long long>(n2));
//about three more for-loops here
}
}这让我可以在每次迭代中“重新开始”,这很好用,因为我的内部操作很大程度上是以veca +=的形式进行的。但我担心它对于大型n1或大型n2来说太慢了。我不知道向量/数组/等等的底层架构,所以我不确定处理这种情况最快的方法是什么。我应该使用数组来代替吗?我应该以不同的方式清除它吗?我应该完全以不同的方式处理逻辑吗?
编辑:矢量的大小在技术上不会改变每次迭代(但它可能会根据函数参数而改变)。我只是试图清除它/等,以便程序在所有其他情况下都是尽可能快的。
编辑:
我的不同方法的结果:
Timings (for a sample set of data):
reclaring vector method: 111623 ms
clearing/resizing method: 126451 ms
looping/setting to 0 method: 88686 ms发布于 2012-04-13 21:23:50
我明显倾向于小的作用域(例如,如果变量只在最里面的循环中使用,就在最里面的循环中声明它),但是对于大的作用域,这可能会导致大量的分配。
因此,如果此循环是一个性能问题,请尝试在循环外声明变量,并仅在循环内清除它-然而,只有在向量的(保留)大小保持不变的情况下,这才是有利的。如果你正在调整向量的大小,那么无论如何你都会得到重新分配。
不要使用原始数组,因为它不会给你带来任何好处,只会带来麻烦。
https://stackoverflow.com/questions/10141583
复制相似问题