0

我想尽快将一个向量复制到另一个向量中。

一种方法是使用std::copy

std::copy(other_vector().begin(),other_vector().end(),this_vector.begin());

但是由于向量很长,我想知道该std::copy函数是否已实现,因此它将使用多个线程。

我可以提供一个自定义逻辑来将向量分成相等的分离部分,分别复制这些项目,但我不想再次重新发明轮子。

std::copy多线程也有效吗?

4

2 回答 2

4

从 C++17 开始,你很幸运,你得到了

template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 >
ForwardIt2 copy( ExecutionPolicy&& policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first );

https://en.cppreference.com/w/cpp/algorithm/copy

于 2020-03-16T10:48:57.650 回答
4

不,std::copy您在问题中显示的重载通常不能实现为并行执行,因为它被指定按从头到尾的顺序依次复制元素。在任何情况下都可能永远不会实现并行执行。

由于 C++17 有标准库算法的并行扩展,它采用额外的第一个参数指定执行策略,假设标准库以这种方式实现它,它可以是并行的,例如(需要#include<execution>):

std::copy(std::execution::par, other_vector().begin(), other_vector().end(), this_vector.begin());

有关执行策略的不同选项及其具体含义,请参见cppreference.com 。

不过,这还没有在所有编译器/标准库中完全实现,可能需要额外的编译器选项。请参阅cppreference.com 的编译器支持表中的“并行 TS 标准化” 。

于 2020-03-16T10:59:42.997 回答