c++ - 如何在不导致复制的情况下将 char 数据附加到 std::vector

标签 c++ c++11 stdvector unsigned-char

我有一个包含一些数据元素的字符 vector 。

std::vector<unsigned char> data_1;

我有一个 unsigned char * 指向另一组数据元素。

unsigned char * data_2;

问题:
有没有一种方法可以将 data_2 合并到 data_1 中,这是一个 vector 而根本不会导致数据元素的拷贝?

我在 this discussion 中读到有关移动语义的内容但我有点不确定在我这里的这种情况下是否有可能。

最佳答案

Is there a way I can merge data_2 into data_1 which is a vector without causing a copy of the data elements at all?

没有。所有将元素插入 vector 的方法都需要至少复制(或移动)每个元素一次。

I read about move semantics being referred in this discussion but I am a bit unsure if it is possible in this situation I have here.

移动一个字符与复制一个字符相同。这种区别仅与具有非平凡移动构造函数或移动赋值运算符的类类型有关。

It wouldn't be possible even if data_2 was a std::vector<unsigned char>?

在不复制(或移动)的情况下追加即使那样也是不可能的。

旁注 1:您可以使用 vector 的移动赋值运算符替换一个 vector 的全部内容,而无需复制(或移动)任何元素。

旁注 2:您可以合并两个基于节点的容器实例,例如 std::list小号,std::set小号,std::map s 及其无序对应项,无需复制(或移动)任何元素。

关于c++ - 如何在不导致复制的情况下将 char 数据附加到 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56734595/

相关文章:

c++ - 带有自定义类的 Unordered_map

c++ - 获取 vector 的大小(以字节为单位)

c++ - 在类中定义友元用户定义的文字运算符

c++ - 在可变参数模板函数中创建成员函数指针的元组

c++ - 预期类型更改时如何获得编译器错误

c++ - 使用 gdb 步进似乎显示程序语句没有任何效果

c++ - 静态 vector 的 setter/getter

c++ - 在 windbg 中查找 STL 双端队列的元素计数

c++ - 如何将 DWORD 或 char* 类型的变量转换为 LPCWSTR?

c++ - dlopen 中对 __dlopen 的未知引用