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な物なのでしょうか? ==, !=は常に比較可能です。 <, <=, >, >=に関しては,
>あと、文字列(定数)や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 の用件である。 と規格書に明記されていますから。 |