如何将char数据附加到std :: vector而不引起复制

Ade*_*erg 1 c++ stdvector unsigned-char c++11

我有一个chars向量,其中包含一些数据元素。

std::vector<unsigned char> data_1;
Run Code Online (Sandbox Code Playgroud)

我有一个未签名的char *,它指向另一组数据元素。

unsigned char * data_2;
Run Code Online (Sandbox Code Playgroud)

问题:
有没有一种方法可以合并data_2data_1向量中而根本不引起数据元素的复制?

我读到了本次讨论中提到的移动语义,但是我不确定在这种情况下是否有可能。

eer*_*ika 5

有没有一种方法可以将data_2合并为data_1(这是一个向量)而完全不复制数据元素?

否。将元素插入向量的所有方式都需要至少复制(或移动)每个元素一次。

我读到了本次讨论中提到的移动语义,但是我不确定在这种情况下是否有可能。

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

即使data_2是std::vector<unsigned char>?也不可能。

即使没有复制,也无法追加(或移动)。

旁注1:您可以使用向量的移动分配运算符将一个向量的全部内容替换为另一向量的内容,而无需复制(或移动)任何元素。

旁注2:您可以合并基于节点的容器的两个实例,如std::listS,std::sets和std::mapS和它们的无序同行而不复制(移动也不)任何元素。