gpt4 book ai didi

c++ - end() 迭代器的算术运算

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:23 25 4
gpt4 key购买 nike

设 A 为 std::vector<double> ,

这是明确的吗?

if(!A.empty())
std::vector<double>::iterator myBack = A.end() - 1;

end迭代器只适用于等式和不等式检查?或者只要我留在容器中,我就可以执行一些指针运算?

在我的平台上,此代码有效。我想知道这是否是可移植的。

最佳答案

它是完全有效的,因为 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'
}

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

关于c++ - end() 迭代器的算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25928547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com