以下是一个MergeSort实现。我的问题是,编译器抱怨std::begin无法将其应用于可变大小的数组 temp以进一步使用std:copy。
我正在使用C ++ 17和gcc 8.3。
template<typename Container, typename Iterator>
void Search::MergeSort(Container &array, Iterator begin, Iterator end)
{
auto const len = end - begin;
if (len > 1)
{
auto mid = begin + len / 2;
MergeSort(array, begin, mid);
MergeSort(array, mid, end);
typename Container::value_type temp[len];
int p = 0;
for (auto i = begin, j = mid; i < mid; ++i)
{
auto curr = *i; …Run Code Online (Sandbox Code Playgroud) 标准库提供了std::copy,它可以被视为 C 的泛化/泛化memcpy()。它还保持 , 的要求memcpy(),使范围 [ first, ) 与范围 [ , )last不相交;否则我们会有未定义的行为。d_firstd_first + std::distance(first, last)
我的问题:是否有一个通用版本std::memmove(即不提出该要求并且通常使用临时缓冲区来实现)?如果不是,怎么会呢?
我想尽快将一个向量复制到另一个向量中。
一种方法是使用std::copy:
std::copy(other_vector().begin(),other_vector().end(),this_vector.begin());
Run Code Online (Sandbox Code Playgroud)
但由于向量很长,我想知道该std::copy函数是否已实现,因此它会使用多个线程。
我可以提供一个自定义逻辑,用于将向量划分为相等的分离部分,以分别复制项目,但我不想再次重新发明轮子。
那么可以std::copy用于多线程吗?