首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++:使用向量/数组优化速度?

C++:使用向量/数组优化速度?
EN

Stack Overflow用户
提问于 2012-04-13 21:18:37
回答 8查看 4K关注 0票数 12

我有一个嵌套的for循环结构,现在我在每次迭代开始时重新声明向量:

代码语言:javascript
运行
复制
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来说太慢了。我不知道向量/数组/等等的底层架构,所以我不确定处理这种情况最快的方法是什么。我应该使用数组来代替吗?我应该以不同的方式清除它吗?我应该完全以不同的方式处理逻辑吗?

编辑:矢量的大小在技术上不会改变每次迭代(但它可能会根据函数参数而改变)。我只是试图清除它/等,以便程序在所有其他情况下都是尽可能快的。

编辑:

我的不同方法的结果:

代码语言:javascript
运行
复制
Timings (for a sample set of data):
reclaring vector method: 111623 ms
clearing/resizing method: 126451 ms
looping/setting to 0 method: 88686 ms
EN

Stack Overflow用户

发布于 2012-04-13 21:23:50

我明显倾向于小的作用域(例如,如果变量只在最里面的循环中使用,就在最里面的循环中声明它),但是对于大的作用域,这可能会导致大量的分配。

因此,如果此循环是一个性能问题,请尝试在循环外声明变量,并仅在循环内清除它-然而,只有在向量的(保留)大小保持不变的情况下,这才是有利的。如果你正在调整向量的大小,那么无论如何你都会得到重新分配。

不要使用原始数组,因为它不会给你带来任何好处,只会带来麻烦。

票数 12
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10141583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档