gpt4 book ai didi

c++ - 通过迭代器与通过运算符 []/索引访问 std::vector 的速度?

转载 作者:IT老高 更新时间:2023-10-28 12:32:11 26 4
gpt4 key购买 nike

说,我有一个

std::vector<SomeClass *> v;

在我的代码中,我需要在程序中经常访问它的元素,将它们向前和向后循环。

这两种访问类型中哪一种是最快的?

迭代器访问:

std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;

// i loops forward, j loops backward
for( i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++ ){
// some operations on v items
}

下标访问(按索引)

std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();

// i loops forward, j loops backward
for( i = 0, j = size - 1; i < size && j >= 0; i++, j-- ){
// some operations on v items
}

而且,如果我不必修改 vector 元素,const_iterator 是否提供了一种更快的访问 vector 元素的方法?

最佳答案

性能差异可能可以忽略不计或没有(编译器可能会将它们优化为相同);您应该担心其他事情,例如您的程序是否正确(缓慢但正确的程序比快速且不正确的程序要好)。不过,使用迭代器还有其他优点,例如能够在不修改循环的情况下将底层容器更改为没有 operator[] 的容器。见 this question了解更多。

与普通迭代器相比,const_iterators 很可能没有或可以忽略的性能差异。它们旨在通过防止修改不应修改的内容来提高程序的正确性,而不是为了性能。 const 关键字也是如此。

简而言之,在发生以下两件事之前,您不应该担心优化:1) 您注意到它运行太慢和 2) 您已经分析了瓶颈。对于 1),如果它的运行速度比它可以运行的慢十倍,但只运行一次并且需要 0.1 毫秒,谁在乎呢?对于 2),确保它绝对是瓶颈,否则优化它对性能几乎没有可衡量的影响!

关于c++ - 通过迭代器与通过运算符 []/索引访问 std::vector 的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2524233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com