イテレータを取るコードを書きましたが、逆の順序で比較を行う必要があります。
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 では、デバッグ モードで実行--last != std::prev(seq_begin)
すると、デバッガ アサーションがエラー メッセージで失敗します。
Expression:string iterator + offset out of range.
しかし、Release モードでは境界チェックがないため、Release モードで実行して正しい結果が得られれば問題ありません。
私の質問は次のとおりです。
std::prev(some_container.begin())
歩哨として安全に使用できsome_container.rend()
ますか?reverse_iterator
と を直接比較するにはどうすればよいiterator
ですか? 私がコードを書いた場合:std::cout << (std::prev(some_container.begin())==some_container.rend()) << std::endl;
コンパイルしてもコンパイルされませんreinterpret_cast
。
物理的prev(some_container.begin())
に等しいかどうか興味がありますか?some_container.rend()