電子書籍の厳選無料作品が豊富!

vectorのイテレータを大小比較する方法を教えてください。
distance(ita, itb) の返り値の正負で判定できるかと
思ったのですが、itb > ita じゃないとエラーになります。
よろしくお願いします。

A 回答 (4件)

begin()の戻り値とitaを引数にdisitance関数を読んだ結果と


begin()の戻り値とitbを引数にdisitance関数を読んだ結果を比較してはどうでしょうか?

std::vector<int> v;
for (int i = 1; i <= 10; ++i) v.push_back(i);

std::vector<int>::iterator ita, itb;

ita = v.begin();
++ita;

itb = v.begin();
++itb;
++itb;
++itb;

if (std::distance(v.begin(), ita) < std::distance(v.begin(), itb)) {
// itaよりitbが後ろにある
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
実はイテレータはvectorじゃなくlistでした。
vectorなら演算子>が使えますが、listではダメなのでこのdistanceを使った方法でためしてみます。

お礼日時:2010/06/30 21:20

ita, itb が同じvectorに紐付いているなら No.2 の方法で可能です。


# 時間計算量はO(N)となりますけども。
それ以外では無理。というかナンセンス。二つのポインタの大小比較に意味がないのと同様。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ita, itb が同じvectorに紐付いているので No.2 の方法で試してみます。

お礼日時:2010/06/30 21:22

ちなみにですが, 「イテレータの前後関係を調べたい」, つまり「ita と itb のうちより前の要素を指しているのはどちらか」を知りたいんだとしたら, あまりにも考えすぎ.


std::vector<T>::iterator はランダムアクセス可能なので, もっと単純に (かつ素直に) 考えれば「適切な方法」を思いつくはずです.
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
vectorならita>itb ? が使えました。

お礼日時:2010/06/30 21:21

「イテレータの大小比較」の結果はどうなってほしいのですか?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
「イテレータの大小比較」というより、どちらがより前の要素を示しているかを知りたいです。

お礼日時:2010/06/30 21:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!