C++相談室 part49
■ このスレッドは過去ログ倉庫に格納されています
0415411
2006/05/12(金) 18:46:03例えば三個先の値を見て分岐する場合
std::list<T> li;
std::list<T>::const_iterator it(li.begin());
...
if (boost::next(it, 3)->getHoge() == ...) { // 3個先の要素のgetHoge()の値で分岐させたい
}
else {
}
こんな感じになるわけですが、boost::nextでイテレータが三回インクリメント
されるときに、[li.begin(), li.end())を超えてしまうと未定義の動作になってしまいます。
かといって、
if (++it != li.end() && ++it != end() && ++it != end() && it->getHoge() == ....) { ... } // �@
とするのはソースが読みにくくなり、また書くのも面倒でしかも使いにくいと思ったわけです。
インクリメントごとに境界チェックするのは>>413さんと同じようにうれしくはないのですが、
�@のコードよりはマシかなと思った次第です。他に方法があればいいのですが・・・
■ このスレッドは過去ログ倉庫に格納されています