小编Vic*_*one的帖子

更改类型后,递归到模板化函数

我目前正在为练习编写自己的合并排序实现.合并列表的左侧和右侧部分时,创建仅包含两侧较小的临时列表是有意义的.但是,逻辑会根据复制到temp的一侧而改变.

我的功能有以下签名:

template<class RandomIt, class Compare>
void Merge(RandomIt begin, RandomIt middle, RandomIt end, Compare Comp);
Run Code Online (Sandbox Code Playgroud)

我有一个聪明的想法来检查[begin,middle)[middle,end)开头的长度,如果左边更大,将迭代器转换为反向迭代器并递归调用该函数.像这样:

template<class RandomIt, class Compare>
void Merge(RandomIt begin, RandomIt middle, RandomIt end, Compare Comp) {
    size_t leftLength = std::distance(begin, middle);
    size_t rightLength = std::distance(middle, end);

    if (leftLength > rightLength) {
        using ReverseIterator = std::reverse_iterator<RandomIt>;
        Merge(ReverseIterator(end), ReverseIterator(std::next(middle)), ReverseIterator(begin), Comp);
        return;
    }
    //Now [begin,middle) is guaranteed <= [middle,end)
    //...
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器会出现相当粗的错误.

fatal error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to …
Run Code Online (Sandbox Code Playgroud)

c++ recursion

6
推荐指数
1
解决办法
96
查看次数

将unique_ptr数组移动到另一个数组的正确方法

我有一个包含在std :: unique_ptr中的数组,我想将内容移动到另一个相同类型的数组中.我需要编写一个循环来逐个移动元素,还是可以使用像std :: move这样的东西?

const int length = 10;
std::unique_ptr<int[]> data(new int[length]);
//Initialize 'data'
std::unique_ptr<int[]> newData(new int[length]);
//Fill 'newData' with the contents of 'data'
Run Code Online (Sandbox Code Playgroud)

编辑:此外,如果阵列大小不同怎么办?

c++ stl c++11

5
推荐指数
1
解决办法
675
查看次数

标签 统计

c++ ×2

c++11 ×1

recursion ×1

stl ×1