设A是std :: vector< double>,
这个定义明确吗?
- if(!A.empty())
- std::vector<double>::iterator myBack = A.end() - 1;
结束迭代器是否仅适用于均等和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?
在我的平台上,此代码有效.我想知道这是否便携.
解决方法
它完全有效,因为vector :: iterator是一个随机访问迭代器.您可以对它执行算术运算,它不依赖于平台.
- std::vector<double>::iterator it = A.end();
- while (it != A.begin()){
- --it; //this will skip A.end() and loop will break after processing A.front()
- //do something with 'it'
- }
但A.end()指的是理论上的过去元素,因此它不指向一个元素,因此不应被解除引用.因此,最佳实践是使用反向迭代器而不是递减结束迭代器.
- for(std::vector<double>::reverse_iterator it = A.rbegin(); it != A.rend(); ++it) {
- //do something with 'it'
- }
这两个循环做同样的事情,第二个是可以理解的,更清洁的方式.