2016-05-04 12 views
0

以下のベクトル型の有効な変換である場合、私は思ったんだけど:C++ベクトル変化型

vector<UINT16> u; 
vector<UINT8> v(u.begin(), u.end()); 

私は、このリンクは、関連が見つかりました: C++ convert vector<int> to vector<double>

しかし、上記の変換かどうかを確認する必要があります有効かどうか。

+5

"有効"を定義してください。 – Amit

答えて

3

std::vector範囲コンストラクタ具体says

という点で、その対応する 要素から構成各要素との)最初の、最後の範囲と同数の要素を有するコンテナを構築 (3)レンジコンストラクタ範囲は、同じ順序で指定します。

これはあなたのUINT16ベクトルuは10個の要素を持っている場合、意志vがあまりにも10個の要素を有することを意味します。オーバーフローが発生する可能性があることを気にする必要はありません。 '有効'であれば、uint16の値を魔法のように2つのuint8の値に分割し、vに加算すると、いいえ、そうではありません。 Windows.h Fromヘッダ

1

typedef unsigned char  UINT8, *PUINT8; 
typedef unsigned short  UINT16, *PUINT16; 

チャーとショートの両方を数値として使用することができます。

これらの両方の間に暗黙の変換があります。

はい、有効です。 (別の質問は完全に別の質問です)

しかし、ベクトルの性質上、以前の数字の「制限」は失われます。これは、「適合」ベクトルに合うように割り当てられます。これにより、UINT16の値によって問題が発生する可能性があります。

+1

私はあなたがなぜ*(安全かどうかはまったく別の質問です)*と言うのが好奇心です。これは危険だと感じますか? – NathanOliver

+0

これは一般的な答えのほんの100%ではありません。いくつかの例が短縮されているので、まれに元のものになります。ポインタを使用している場合、これは安全ではない可能性があります(サイズが異なるため)。 – DarmaniLink