and*_*ykx 5 c++ indexing iterator vector
迭代向量的元素时,最好使用迭代器而不是索引(请参阅为什么使用迭代器而不是数组索引?).
std::vector<T> vec;
std::vector<T>::iterator it;
for ( it = vec.begin(); it != vec.end(); ++it )
{
// do work
}
Run Code Online (Sandbox Code Playgroud)
但是,可能需要在循环体中使用索引.考虑到性能和灵活性/可扩展性,在这种情况下,下列哪一项更可取?
std::vector vec;
size_t i;
for ( i = 0; i < vec.size(); ++i )
{
// use i
}
std::vector vec;
std::vector::iterator it;
for ( it = vec.begin(); it != vec.end(); ++it )
{
size_t i = it - vec.begin();
// use i
}
std::vector vec;
std::vector::iterator it;
for ( it = vec.begin(); it != vec.end(); ++it )
{
size_t i = std::distance( vec.begin(), it );
// use i
}
Luc*_*lle 13
如果您计划仅使用向量,则可能需要切换回索引循环,因为它比迭代器循环更清楚地传达您的意图.但是,如果将来程序的演变可能导致容器的更改,则应该坚持使用迭代器并使用std :: distance,这可以保证与所有标准迭代器一起使用.
使用std :: distance更通用,因为它适用于所有迭代器,而不仅仅是随机访问迭代器.在随机访问迭代器的情况下,它应该与它一样快 - vec.begin().
它 - vec.begin()基本上是指针算术.
| 归档时间: |
|
| 查看次数: |
4256 次 |
| 最近记录: |