【发布时间】:2021-07-09 07:19:57
【问题描述】:
我有这个代码:
int main()
{
std::vector<unsigned char> cVec{ 'a','r','t','u' };
std::vector<unsigned short>sVec;
sVec = { reinterpret_cast<unsigned short*>(&cVec[0]), reinterpret_cast<unsigned short*>(&cVec[cVec.size()-1]) };
for (auto i : sVec)
std::cout << i << '\n';
return 0;
}
但是当我运行它时,我有这个错误:
vector out of range
我该如何解决这个问题?
谢谢
【问题讨论】:
-
这是一种巨大的未定义行为。你到底想做什么?
sVec应该有 1、2 或 4 个元素? -
2 个元素。自然,它必须采用
a和r并将它们转换为其他 2 的简短相同 -
Char 为 1 字节,short 为 2 字节。您正在获取第一个元素的地址并将指向 char 的指针重新解释为指向 short 的指针,并对最后一个元素执行相同的操作?因此,不是在每个新地址都有一个元素,而是希望在每个其他内存地址都有一个元素,但仍然希望找到 4 个元素?向量不是协变的。您不能以这种方式将 vector
转换为 vector 。 -
@无用
to see shorts containing two consecutive chars -
@MariusBancila 我可以用什么方法来解决它?
标签: c++ vector reinterpret-cast