【问题标题】:Cast/Convert const vector<uint8_t> to const vector<char> in c++在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>
【发布时间】:2020-06-03 21:10:24
【问题描述】:

在 c++ 中将const vector&lt;uint8_t&gt; 转换/转换为const vector&lt;char&gt; 的最高效方法是什么?

【问题讨论】:

  • 虽然绝对不符合标准,但如果 uint8_ttypedefed 到 unsigned char(通常是这样),您可能可以使用普通的旧 C 风格演员表摆脱困境
  • 绝对不符合标准 ;-)
  • 请注意,如果可以解决问题,您可以为内容设置别名
  • @M.M 您能否提供一个将向量 别名化为 const vector 的示例?
  • @Tito 你可以给内容取别名,而不是向量。例如。 const char *p = (const char *)&amp;v[0];

标签: c++ c++11 c++17


【解决方案1】:

这应该可以工作(未经测试的代码):

std::vector<uint8_t> v1 = // something;
const char *p = (const char *) v1.data();
std::vector<char> v2(p, p + v1.size());

现在你有两个向量; uint8_ts 之一和chars 之一

一次内存分配,一次调用memcpy

[后来:@Tito指出vector没有(指针,大小)构造函数(如string/span/string_view)重写示例代码以使用(迭代器,迭代器)构造函数而是]

【讨论】:

  • Marschall 没有用于此类初始化的匹配构造函数。你确定这是正确的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2020-12-14
相关资源
最近更新 更多