C ++向量更改类型

时间:2016-05-04 21:06:59

标签: c++ c++11 vector

我想知道以下是否是矢量类型的有效转换:

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

我发现此链接相关: C++ convert vector<int> to vector<double>

但是,需要确认上述转换是否有效。

2 个答案:

答案 0 :(得分:3)

std::vector范围构造函数具体为says

  

(3)范围构造函数       构造一个容器,其元素与范围[first,last]一样多,每个元素都由其对应构造   该范围内的元素,顺序相同。

这意味着如果您的UINT16向量u有10个元素,v 也会有10个元素。不关心它可能造成的任何溢出。如果有效&#39;你的意思是它会将uint16值神奇地分成2个uint8并将它们添加到v然后不是,那不是这样。

答案 1 :(得分:1)

来自Windows.h标题:

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

Char和Short都可以用作数字。

他们两人之间都有隐含的转换。

是的,它是有效的。 (完全是另一个问题是安全的)

然而,之前的数字&#34;限制&#34;将失去,因为由于向量的性质,这些将被分配以适应&#34;拟合&#34;向量。这可能会导致问题,具体取决于UINT16的值