我有一个包含一些数据元素的字符 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/