以下のベクトル型の有効な変換である場合、私は思ったんだけど:C++ベクトル変化型
vector<UINT16> u;
vector<UINT8> v(u.begin(), u.end());
私は、このリンクは、関連が見つかりました: C++ convert vector<int> to vector<double>
しかし、上記の変換かどうかを確認する必要があります有効かどうか。
以下のベクトル型の有効な変換である場合、私は思ったんだけど:C++ベクトル変化型
vector<UINT16> u;
vector<UINT8> v(u.begin(), u.end());
私は、このリンクは、関連が見つかりました: C++ convert vector<int> to vector<double>
しかし、上記の変換かどうかを確認する必要があります有効かどうか。
std::vector
範囲コンストラクタ具体says:
という点で、その対応する 要素から構成各要素との)最初の、最後の範囲と同数の要素を有するコンテナを構築 (3)レンジコンストラクタ範囲は、同じ順序で指定します。
これはあなたのUINT16
ベクトルu
は10個の要素を持っている場合、意志v
があまりにも10個の要素を有することを意味します。オーバーフローが発生する可能性があることを気にする必要はありません。 '有効'であれば、uint16の値を魔法のように2つのuint8の値に分割し、v
に加算すると、いいえ、そうではありません。 Windows.h
Fromヘッダ
:
typedef unsigned char UINT8, *PUINT8;
typedef unsigned short UINT16, *PUINT16;
チャーとショートの両方を数値として使用することができます。
これらの両方の間に暗黙の変換があります。
はい、有効です。 (別の質問は完全に別の質問です)
しかし、ベクトルの性質上、以前の数字の「制限」は失われます。これは、「適合」ベクトルに合うように割り当てられます。これにより、UINT16の値によって問題が発生する可能性があります。
私はあなたがなぜ*(安全かどうかはまったく別の質問です)*と言うのが好奇心です。これは危険だと感じますか? – NathanOliver
これは一般的な答えのほんの100%ではありません。いくつかの例が短縮されているので、まれに元のものになります。ポインタを使用している場合、これは安全ではない可能性があります(サイズが異なるため)。 – DarmaniLink
"有効"を定義してください。 – Amit