c++ 矢量优化
c++ Vector optimizations
我有向量,像这样:
struct cords {
double x, y;
};
struct road {
cords start, end;
};
vector<road> roads;
我在课堂上发现了一个函数,它的工作速度非常慢。该函数的主要特性是从向量中获取所有对,并对它们进行一些数学运算。我没有更改 vector 内部项目的值,只是经常阅读它们。我注意到的第一个问题,循环本身不够快,这就是我使用的原因:
unsigned maxI = roads.size();
unsigned maxJ = roads.size();
for (unsigned i = 0; i < maxI; i++) {
for (unsigned j = i + 1; j < maxJ; j++) {
...
}
}
它为此功能提供了合理的时间改进,但还不够。
正如我之前所说,里面的东西只是数学和几个条件,调用像这样的向量:roads[j].end.y
。
下一步,我已经注意到,如果我正在做
for (unsigned i = 0; i < maxI; i++) {
cords point1 = roads[i].start;
cords point2 = roads[i].end;
for (unsigned j = i + 1; j < maxJ; j++) {
使用point1, point2
而不是roads[j].end.y
它的工作速度几乎快了两倍。
我只是不明白为什么会发生这种情况,以及如何进一步改进它。
UPD:不确定,但这可能是一个依赖于编译器的问题,所以我使用带有内置的 vs2015。
如果不需要临时修改内部循环中的point1
和point2
,那么避免复制它们只是对它们的常量引用以提高速度。
const cords &point1 = roads[i].start;
const cords &point2 = roads[i].end;
相关文章:
- 空基优化子对象的地址
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 返回值优化:显式移动还是隐式
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 浮点定向舍入和优化
- Visual Studio 调试优化如何工作?
- 为什么开关的优化方式与 c/c++ 中的链接不同?
- 线性优化目标函数中的绝对值
- GCC 会优化内联访问器吗?
- gcc 如何优化此循环?
- 如何防止 CUDA-GDB 中的<优化输出>值
- 为什么我的程序在 O0 和 O2 的优化级别返回不同的结果
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 使用 std::p air 进行返回值优化