小编aiv*_*020的帖子

std :: copy n元素或结尾

我想复制N个元素.

template< class InputIt, class Size, class OutputIt>
OutputIt myCopy_n(InputIt first, InputIt last, Size count, OutputIt result)
{
    Size c = count;
    while (first != last && c > 0) {
        *result++ = *first++;
        --c;
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用std函数做到这一点?我还可以:

template< class InputIt, class Size, class OutputIt>
OutputIt myCopy_n(InputIt first, InputIt last, Size count, OutputIt result)
{
    if(std::distance(first, last) > count)
        return std::copy_n(first,count,result);
    return std::copy(first,last,result);
}
Run Code Online (Sandbox Code Playgroud)

然而,除了麻烦之外,它超过了范围两次(距离,复制).如果我正在使用变换迭代器或过滤迭代器,那么这些是对我的过滤器/变换函数的O(N)个不必要的调用.

template <class InputIt, class OutputIt>
OutputIt copy_n_max(InputIt begin, InputIt end, OutputIt last, size_t …
Run Code Online (Sandbox Code Playgroud)

c++ stl-algorithm

22
推荐指数
3
解决办法
3949
查看次数

设置交集大小而不分配

给定 2 个集合(C++),有一种方便的方法可以在不进行任何分配的情况下获取交集的大小(如 std::set_intersection 所做的那样)

当然,我可以复制减去分配的实现,但我总是不愿意重新发明轮子

int count = 0;
while (first1!=last1 && first2!=last2)
{
    if (*first1<*first2) ++first1;
    else if (*first2<*first1) ++first2;
    else {
        count++; ++first1; ++first2;
    }
 }
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用 std::set_intersection 并传递“计数”迭代器......?

c++ set-intersection

4
推荐指数
1
解决办法
359
查看次数

标签 统计

c++ ×2

set-intersection ×1

stl-algorithm ×1