我想复制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) 给定 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 并传递“计数”迭代器......?