c++ 矢量优化

c++ Vector optimizations

本文关键字:优化 c++      更新时间:2023-10-16

我有向量,像这样:

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。

如果不需要临时修改内部循环中的point1point2,那么避免复制它们只是对它们的常量引用以提高速度。

const cords &point1 = roads[i].start;
const cords &point2 = roads[i].end;