代码之家  ›  专栏  ›  技术社区  ›  L. F.

如何将n个相邻元素插入到元素类型不可复制的std::vector中?

  •  1
  • L. F.  · 技术社区  · 6 年前

    n 连续的不可复制元素 std::vector insert emplace 我发现:

    iterator insert( const_iterator pos, size_type count, const T& value );
    

    但是自从 T

    template< class... Args > 
    iterator emplace( const_iterator pos, Args&&... args );
    

    安放 解决了不可复制的问题,但每次只能插入一个元素。因为我想插入 n个 元素,整体时间复杂度为二次。 O(n*size())

    有什么标准和便携的方法可以做到这一点吗?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Praetorian Luchian Grigore    6 年前

    如果要插入 n vector ,您可以使用 resize

    std::vector<std::unique_ptr<int>> v;
    v.resize(v.size() + 10);              // append 10 elements
    

    如果要将它们插入其他位置,请使用 insert 矢量

    std::unique_ptr<int> arr[10];
    v.insert(v.begin(),
             std::make_move_iterator(std::begin(arr)),
             std::make_move_iterator(std::end(arr)));
    

    Live demo

        2
  •  1
  •   Yakk - Adam Nevraumont    6 年前

    在预备队结束后安置他们。O(n+m)为m新元素和n个存在元素。

    std::rotate k 是你想要的向量中的位置。


    template< class InputIt > iterator insert( const_iterator pos, InputIt first, InputIt last ); 超载。这有更多的样板,但避免了一些动作。