转换为 short 时向量超出范围

vector out of range when converting to short

我有这个代码:

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

我该如何解决这个问题?

谢谢

你想做的可能是这样的:

int main()
{
   std::vector<unsigned char> cVec{ 'a','r','t','u' };

   unsigned short* ptr = reinterpret_cast<unsigned short*>(&cVec[0]);
   std::vector<unsigned short> sVec{ ptr, ptr + cVec.size() / sizeof(unsigned short) };
   for (auto i : sVec)
      std::cout << i << '\n';
}

您正在将指向第一个和最后一个字符的指针传递给 std::vector 构造函数。指针应该指向第一个和最后一个字符之后的指针。由于您传递的两个指针之间的距离不是 short 的整数,因此代码具有未定义的行为。以下代码应该可以解决问题:

#include <vector>
#include <iostream>

int main()
{
    std::vector<unsigned char> cVec{ 'a','r','t','u' };
    std::vector<unsigned short>sVec;

    sVec = { reinterpret_cast<unsigned short*>(cVec.data()), reinterpret_cast<unsigned short*>(cVec.data() + cVec.size()) };
    for (auto i : sVec)
        std::cout << i << '\n';
    return 0;
}

请注意,您不能使用 &cVec[cVec.size()],因为它也有未定义的行为。