C ++ Vector 优化

c++ Vector optimizations

我有矢量,像这样:

struct cords {
    double x, y;
};
struct road {
    cords start, end;
};
vector<road> roads;

而且我在我的 class 中发现了一个运行速度非常慢的函数。该函数的主要特性是从向量中获取所有对并用它们做一些数学运算。我不会更改内部 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引用以提高速度。

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