📜  C++中的std :: inserter(1)

📅  最后修改于: 2023-12-03 15:14:02.880000             🧑  作者: Mango

介绍 C++ 中的 std::inserter

在 C++ 标准库中,有一个非常有用的模板类 std::inserter,它允许在容器中插入元素,而无需手动构造一个迭代器。

简介

std::inserter 是一个模板类,定义在头文件 中,它的作用是将元素插入到指定的容器中。通过传递一个容器的迭代器,std::inserter 可以自动根据容器的类型调用容器的 insert() 函数将元素插入到指定位置。

std::inserter 的定义如下所示:

template<typename Container>
std::back_insert_iterator<Container> back_inserter(Container& c);
template<typename Container>
std::front_insert_iterator<Container> front_inserter(Container& c);
template<typename Container>
std::insert_iterator<Container> inserter(Container& c, typename Container::iterator i);

其中,back_inserter() 和 front_inserter() 分别返回一个 std::back_insert_iterator 和 std::front_insert_iterator。这两种迭代器分别插入元素到容器的末尾和开头。

insert() 函数则允许将元素插入到指定的迭代器位置。

使用示例

下面是一个使用 std::inserter 的示例程序:

#include <iostream>
#include <vector>
#include <iterator>
 
int main()
{
    std::vector<int> v{1, 2, 3, 4};
 
    // 插入新元素到 v 的末尾
    std::fill_n(std::back_inserter(v), 3, 5);
 
    // 输出 v 的值
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // 插入新元素到 v 的开头
    std::fill_n(std::front_inserter(v), 3, 6);
 
    // 输出 v 的值
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    // 插入新元素到 v 的指定位置
    std::fill_n(std::inserter(v, v.begin() + 3), 3, 7);
 
    // 输出 v 的值
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    return 0;
}

在以上示例程序中,使用了 std::back_inserter 和 std::front_inserter 将元素插入到容器的末尾和开头。同时,还使用了 std::inserter 将元素插入到指定的位置。

总结

使用 std::inserter 可以轻松地向容器中插入元素,避免手动构建迭代器的麻烦。它是 C++ 标准库中非常有用的一个模板类,使用它可以让程序员的工作更加简单高效。