C++ 如何通过引用有效地合并两个向量?

C++ 如何通过引用有效地合并两个向量?,c++,vector,reference,move,C++,Vector,Reference,Move,如果有两个向量,都包含已分配的数据: 考虑到向量只包含基元, 在不复制任何内容的情况下一个接一个地连接最有效的方法是什么 在这个特定的例子中,向量都包含大量的数据,可能有数百万个数字。通过引用将向量赋予函数的目的是优化,因此不需要从每个向量复制数据 这真的值得吗?根据这个问题,它可能不会 两种可能的解决方案是使用-s或指针,最有效的方法是什么 可能的解决办法是: #包括 #包括 #包括 #包括 使用std::vector; 使用std::reference_包装器; 使用std::for_; 无

如果有两个向量,都包含已分配的数据: 考虑到向量只包含基元, 在不复制任何内容的情况下一个接一个地连接最有效的方法是什么

在这个特定的例子中,向量都包含大量的数据,可能有数百万个数字。通过引用将向量赋予函数的目的是优化,因此不需要从每个向量复制数据

这真的值得吗?根据这个问题,它可能不会

两种可能的解决方案是使用-s或指针,最有效的方法是什么

可能的解决办法是:

#包括
#包括
#包括
#包括
使用std::vector;
使用std::reference_包装器;
使用std::for_;
无效a_函数(向量a、向量b){
矢量联合;
美国储备银行(a.size()+b.size());
united.insert(united.begin(),a.begin(),a.end());
united.insert(united.end(),b.begin(),b.end());
//…使用联合。。
对于每个(united.begin()、united.end()、[&](int和common_向量){
++公共_向量;
});
}
int main(){
向量a(0);
向量b(0);
a、 推回(0);
a、 推回(1);
a、 推回(2);
a、 推回(3);

对于每个(a.begin()、a.end()、[&](int和common_向量){std::cout没有办法。你必须复制一些东西。你的最终目标是什么?你只需要在两个容器上迭代,但你不想写两个循环吗?复制
int
s比创建/使用
reference\u wrapper
s便宜。我们不知道向量中的元素是否大于你的情况是这样的,但正确的答案可能取决于此。你能在这方面修正这个问题吗?你的
reference\u wrapper
s向量将占用与
int
s向量一样多的内存,并且可能构造和访问速度较慢。你如何准确定义“有效”呢在你的情况下?在不知道的情况下,我们无法给出解决方案。如果你有大量的数据,复制成本很高,你可以编写自己的容器,内部是向量向量。你只需推送整个向量,移动向量,并向用户提供容器的API(尤其是迭代器,它可以跨内部向量边界进行迭代)。