美文网首页
C++ STL back_inserter 函数说明

C++ STL back_inserter 函数说明

作者: book_02 | 来源:发表于2019-09-26 07:42 被阅读0次

    说明

    back_inserter用于在末尾插入元素。
    实现方法是构造一个迭代器,这个迭代器可以在容器末尾添加元素。
    这个迭代器是以安插(insert)方式而非覆写(overwrite)方式运作的。

    可以使用back_inserter的容器是有push_back成员函数的容器,比如vector, deque and list

    函数签名:

    template <class Container>
      back_insert_iterator<Container> back_inserter (Container& x);
    

    头文件

    #include <iterator>

    例子:在末尾添加一个元素

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    
    int main()
    {
        std::vector<int> v1{ 1, 2, 3, 4, 5, 6 };
    
        *(std::back_inserter(v1)) = 10;
    
        std::cout << "v1:   ";
        for (int i : v1) {
            std::cout << i << "\t";
        }
        std::cout << std::endl;
    
        return 0;
    }
    

    结果:

    v1:   1    2       3       4       5       6       10
    

    例子:拷贝v2到v1的末尾

    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    int main()
    {
        std::vector<int> v1{ 1, 2, 3, 4, 5, 6};
        std::vector<int> v2{ 10, 20, 30, 40, 50, 60};
    
        std::copy(v2.begin(), v2.end(), std::back_inserter(v1));
    
        std::cout << "v1:   ";
        for (int i : v1) {
            std::cout << i << "\t";
        }
        std::cout << std::endl;
    
        return 0;
    }
    

    结果:

    v1:   1 2       3       4       5       6       10      20      30      40      50      60
    

    end()的不同

    首先end()返回的迭代器是不支持解引用的,要想修改最后一个元素使用v.end()-1,强行对end()解引用会报异常。

    然后*(v.end()-1) = 10;是修改最后一个元素内容,而*(std::back_inserter(v2)) = 10;是在末尾新增一个元素。

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <iterator>
    
    int main()
    {
        std::vector<int> v1{ 1, 2, 3, 4, 5, 6};
        std::vector<int> v2{ 1, 2, 3, 4, 5, 6 };
    
        *(v1.end()-1) = 10;
        *(std::back_inserter(v2)) = 10;
    
        std::cout << "v1: ";
        for (int i : v1) {
            std::cout << i << "\t";
        }
        std::cout << std::endl << std::endl;
    
        std::cout << "v2: ";
        for (int i : v2) {
            std::cout << i << "\t";
        }
        std::cout << std::endl << std::endl;
    
        system("pause");
        return 0;
    }
    

    结果:

    v1: 1   2       3       4       5       10
    
    v2: 1   2       3       4       5       6       10
    

    参考

    http://www.cplusplus.com/reference/iterator/back_inserter/

    相关文章

      网友评论

          本文标题:C++ STL back_inserter 函数说明

          本文链接:https://www.haomeiwen.com/subject/xhfmuctx.html