C言語関係掲示板

過去ログ

No.1345 vecotrのイテレータの大小比較

[戻る] [ホームページ]
No.18248

vecotrのイテレータの大小比較
投稿者---イタチ(2004/11/19 16:39:10)


vectorのイテレータは比較演算子で比較してもOKな物なのでしょうか?
イテレータの指すアドレスを表示すると、とりあえず一定の値で変化するのですが
連続性があるのか分からないので、比較して良いものかどうか。

と言うのも、現在参照しているイテレータよりも前のイテレータか後のイテレータなのかを
判別したいのです。
こんな感じです。
// itePrevが比較基準でiteが比較対照
if( ite > itePrev ){
    printf( "参照位置より後ろ\n" );
}else{
    printf( "参照位置より前\n" );
}


文字列等のポインタなら、そのポインタが今参照しているアドレスの前か後ろかを比較演算子で
比較するだけでOKだったのですが、イテレータはポインタじゃないと以前聞いたのでどの様にすれば
良いのか質問させていただきました。

あと、文字列(定数)やmallocで確保された領域は連続したアドレス空間にあると
保証されているのでしょうか?
(保証されていることを前提にこの質問を書いています^^;)


No.18249

Re:vecotrのイテレータの大小比較
投稿者---επιστημη(2004/11/19 16:49:53)


>vectorのイテレータは比較演算子で比較してもOKな物なのでしょうか?

random-access-iterator なので大小比較できるはずです。



No.18250

Re:vecotrのイテレータの大小比較
投稿者---YuO(2004/11/19 16:54:34)


>vectorのイテレータは比較演算子で比較してもOKな物なのでしょうか?

==, !=は常に比較可能です。

<, <=, >, >=に関しては,
  • ポインタと同じく,同一のvectorに所属するオブジェクトを参照するイテレータであれば,比較可能
  • ポインタと同じく,異なるvectorに所属するオブジェクトを参照するイテレータの場合は,比較不可能
となります。


>あと、文字列(定数)やmallocで確保された領域は連続したアドレス空間にあると
>保証されているのでしょうか?

先頭を指すchar型のポインタpに対して,文字列や確保した領域のサイズがnバイトのとき,
[p, p + n)の範囲が文字列やmallocで確保された領域になることは保障されています。

CPUのアドレス空間に対してどのようにマッピングされるかは規定されていません。



No.18253

ありがとうございました。
投稿者---イタチ(2004/11/19 20:41:29)


お二人ともご回答ありがとうございました。

>random-access-iterator なので大小比較できるはずです。
と言うことは、vectorに限らずrandom-access-iteratorなら大小比較出来るということですね。

>先頭を指すchar型のポインタpに対して,文字列や確保した領域のサイズがnバイトのとき,
>[p, p + n)の範囲が文字列やmallocで確保された領域になることは保障されています。
保証されてるんですね。
変なところで心配症なもので、今までやってきた事は間違っていたのかとふと心配に
なってしまいました^^;
分かり易い説明ありがとございました。


スレッドを伸ばさないためにまとめさせていただきました。


No.18298

Re:ありがとうございました。
投稿者---επιστημη(2004/11/22 10:43:48)


>>random-access-iterator なので大小比較できるはずです。
>と言うことは、vectorに限らずrandom-access-iteratorなら大小比較出来るということですね。

大小比較できることが random-access-iterator の用件である。
と規格書に明記されていますから。