c++ - 使用迭代器将 N 个元素从一个容器插入到另一个容器

标签 c++ iterator c++14

我想将存在于容器 A 中的元素插入到容器 B 中,其方式等同于以下内容:

auto iter = /* iterator from somewhere in A */
for (auto i=0; i<N && iter++ != A.cend(); i++)
    B.push_back(*iter);

但是使用 insert 而不是 for 循环,就像这样;

B.insert(B.end(), iter, iter + N);

最佳答案

#include <algorithm>
#include <iterator>

auto a_iter = /* iterator from somewhere in A */, a_end = A.end();
std::copy_n(a_iter, std::min(N, std::distance(a_iter, a_end)), std::inserter(B, B.end()));

作为一个独立的算法:

template<typename IterT, typename CollT>
std::insert_iterator<CollT> insert_n(
    IterT a_iter, IterT a_end,
    typename std::iterator_traits<IterT>::difference_type N,
    CollT& B
) {
    return std::copy_n(
        a_iter,
        std::min(N, std::distance(a_iter, a_end)),
        std::inserter(B, B.end())
    );
}

关于c++ - 使用迭代器将 N 个元素从一个容器插入到另一个容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555502/

相关文章:

c++ - 具有副作用的类模板静态成员的初始化

c++ - 集合的结构之间的比较

c++ - 如何知道 Windows 本地服务是否启用了唤醒计时器?

C++ 从另一个 Win32 应用程序获取 GDI 原始文本

java - 遍历/更新 HashMap

c# - 在 C# 中使用 yield return 迭代器的目的/优势是什么?

c++ - vector 结束迭代器

javascript - 检测键盘是否连接到 Windows Surface?

c++ - Eigen 二维叉积

c++ 范围的排序 View - 如何创建 const_iterator?