gpt4 book ai didi

c++ - 是否可以使用 `std::copy` 将值从可变大小的数组复制到容器?

转载 作者:太空狗 更新时间:2023-10-29 19:47:33 25 4
gpt4 key购买 nike

下面是一个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;
while (j < end && *j < curr) temp[p++] = *j++;
temp[p++] = curr;
}

auto temp_begin = std::begin(temp); // ! problem: unable to compile this line
copy(temp_begin, temp_begin + p, begin);
}

错误信息包括:

template argument deduction/substitution failed:
note: mismatched types 'std::initializer_list<_Tp>' and 'std::vector<int>::value_type*' {aka 'int*'}
variable-sized array type 'std::vector<int>::value_type [len]' {aka 'int [len]'} is not a valid template argument

enter image description here

最佳答案

Is it possible to use std::copy to copy values from a variable-sized array to a container?

回答你的问题。 ,就像 @Maxim Egorushkin 的答案,一个人可以做到。

但是,请不要使用变长数组,因为依赖于某些东西 not part of C++ standard is a bad idea.

其次,C++ 提供了更好的选项,如 std::vector s 或 std::array ;因此只需使用它们。

例如,使用 std::vector,您可以编写完全没有错误的合法代码(如评论中提到的 @NathanOliver )。

#include <vector>

using value_type = typename Container::value_type;

/* or by iterator_traits
* using value_type = typename std::iterator_traits<Iterator>::value_type;
*/
std::vector<value_type> temp(len);

如果 len 是编译时已知变量,您也可以使用 std::array

关于c++ - 是否可以使用 `std::copy` 将值从可变大小的数组复制到容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55874486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com