1

での vector の実装について質問がありEASTLます。リンクはこちら。

つまり、メソッドでsize(). これは次のようになります。

template <typename T, typename Allocator>
inline typename vector<T, Allocator>::size_type
vector<T, Allocator>::size() const
{
    return (size_type)(mpEnd - mpBegin);  
}

size_typeuint32_tmpBegin/はmpEndT* ポインターです。

(mpEnd - mpBegin) からの uint32_t へのキャストがベクトル内の要素のと等しい方法がわかりません。で割るべきではありませんsizeof(T)か?それ以外の場合は、ベクター内のすべての要素のサイズをバイト単位で取得するだけですか?

私は何が欠けていますか?

編集:EASTLベクトルがベクトルのstl定義に従っていない場合を除きますが、データが見つからず、stlベクトルをeastlベクトルに置き換えることが可能であると思われます

4

2 に答える 2

2

操作が配列内の要素の数と等しくなるのはキャストではありません。ポインタの減算は、ここですでに正しいことを行っています。あるポインタを別のポインタから引くとき、それらが指す型のサイズが考慮されます。で割る必要はありませんsizeof(T)。Cでも、常にこのようになっています。キャストは、戻り値の正しい整数型に変換するだけです(まだ変換されていない場合)。

于 2012-04-14T19:28:57.957 に答える
1

サイズは、char*またはを使用している場合はバイト単位ですvoid*。それ以外の場合は、にありsizeof(T)ます。以来mpEndmpBeginですT*

于 2012-04-14T19:28:34.780 に答える