转换为 std::vector-6ren"> 转换为 std::vector-我有一个 std::vector of bytes ( char ),我想做相当于 “C 风格转换” 这个 vector 到一个类型的 vector wchar_t . 显然,我真正需要做的是复制数据-6ren">
gpt4 book ai didi

c++ - 如何将 "cast"std::vector 转换为 std::vector

转载 作者:可可西里 更新时间:2023-11-01 18:26:48 25 4
gpt4 key购买 nike

我有一个 std::vector of bytes ( char ),我想做相当于 “C 风格转换” 这个 vector 到一个类型的 vector wchar_t .

显然,我真正需要做的是复制数据,但这里的问题是我已经在左侧有一个 UTF-16 字节流,我只想将其移至 wchar_t。 vector ,以便我可以使用它。理想情况下,我只想交换缓冲区,但我不确定如何以安全的方式进行交换...

执行安全转换复制操作允许的尽可能高效的 C++ 方法是什么?

注意:

我将 UTF-16 字符串存储为 std::wstringstd::vector<wchar_t>但我有这个内存缓冲区,我碰巧知道它是 UTF-16,我需要以某种方式复制它......

最佳答案

最有效(也是最明智)的方法就是不做。让你的vector<char>拥有数据缓冲区,并简单地创建一对 wchar_t用作指向 vector 的迭代器的指针。

std::vector<char> vec;
wchar_t* first = reinterpret_cast<wchar_t*>(&vec[0]);
wchar_t* last = reinterpret_cast<wchar_t*>(&vec[0] + vec.size());

现在您有了一对迭代器,可以很好地处理所有标准库算法。而且您不必复制一个字节。 :)

(免责声明:我假设 vector 的大小可以被 sizeof(wchar_t) 整除。否则你将不得不调整 last 指针)

关于c++ - 如何将 "cast"std::vector<char> 转换为 std::vector<wchar_t>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8401814/

25 4 0