我写了一些带有迭代器但必须以相反顺序进行比较的代码,
template<class ConstBiIter>
bool func(ConstBiIter seq_begin, ConstBiIter seq_end)
{
ConstBiIter last = std::prev(seq_end);
while (--last != std::prev(seq_begin)) // --> I need to compare the beginning data
{
......
}
return true;
}
在 VS2013 中,在 Debug 模式下运行时,--last != std::prev(seq_begin)
会导致调试器断言失败,并显示错误消息
Expression:string iterator + offset out of range.
但是在 Release 模式下运行并给出正确的结果是完全可以的,因为在 Released 模式下没有边界检查。
我的问题是:
std::prev(some_container.begin())
像哨兵一样使用安全some_container.rend()
吗?如何直接比较 a
reverse_iterator
和 aiterator
?如果我写代码:std::cout << (std::prev(some_container.begin())==some_container.rend()) << std::endl;
它不会编译,即使你是reinterpret_cast
他们。
我很好奇身体上是否prev(some_container.begin())
相等?some_container.rend()