【发布时间】:2011-02-01 05:26:36
【问题描述】:
说,我有一个
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
}
而且,如果我不必修改向量元素,const_iterator 是否提供了一种更快的访问向量元素的方法?
【问题讨论】:
-
分析器结果向您展示了什么?
-
如果我有时间并且愿意分析我不会在这里问的代码。我只是想知道 stl 迭代器实现是否有某种访问优化。
-
如果向量拥有对象,请考虑使用
boost::ptr_vector。否则使用boost::reference_wrapper。 -
@Space_C0wb0y 'boost::ptr_vector'(在我的情况下)是否比 std::vector 快?
标签: c++ stl vector iterator performance