加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – end()迭代器上的指针算法

发布时间:2020-12-16 03:46:11 所属栏目:百科 来源:网络整理
导读:设A是std :: vector double, 这个定义明确吗? if(!A.empty()) std::vectordouble::iterator myBack = A.end() - 1; 结束迭代器是否仅适用于均等和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算? 在我的平台上,此代码有效.我想知道这是否便携
设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'
}

这两个循环做同样的事情,第二个是可以理解的,更清洁的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读