我发现自己写了很多东西:
int location =2;
vector<int> vec;
vector<int>::iterator it=vec.begin();
/..../
std::advance(it, location);
Run Code Online (Sandbox Code Playgroud)
代替
it= it + 5;
Run Code Online (Sandbox Code Playgroud)
什么是首选/推荐方式?
Jer*_*fin 16
添加仅适用于随机访问迭代器.std :: advance将适用于各种迭代器.只要你只将迭代器处理成向量,它就没有什么区别,但是std :: advance使你的代码更加通用(例如,你可以用一个列表代替向量,那部分仍然可以工作).
编辑:对于那些谁照顾,该标准描述std::advance和std::advance如下(§24.3.4/ 1):
由于只有随机访问迭代器提供了+和 - 运算符,因此该库提供了两个函数模板
list和vector.这些函数模板使用advance和distance随机访问迭代器(因此,它们是恒定的时间); 用于输入,转发和双向迭代器,用于advance提供线性时间实现.
这取决于你需要什么:
如果您需要通用性,请使用std::advance(it,2).如果有人出现并将其更改std::vector为a std::list,则代码仍将编译,即使现在提前需要线性时间而不是恒定时间.
如果您需要性能,请使用it+=2.如果有人出现并将您更改std::vector为a std::list,则代码将无法编译,指向(可能带有帮助的评论)严重的性能问题.
| 归档时间: |
|
| 查看次数: |
7792 次 |
| 最近记录: |