C++ Deque::insert() 函式



C++ 的std::deque::insert()函式用於在指定位置插入元素。它接受插入位置和要插入的元素作為引數。當插入元素時,它會動態調整容器的大小。

與向量不同,雙端佇列由於其雙向連結結構,支援在兩端和容器內部插入。

此函式有 5 個多型變體:使用單個元素版本、填充版本、範圍版本、移動版本和初始化列表版本(您可以在下面找到所有變體的語法)。

語法

以下是 std::deque::insert() 函式的語法。

iterator insert (const_iterator position, const value_type& val);
or	
iterator insert (const_iterator position, size_type n, const value_type& val);
or
iterator insert (const_iterator position, InputIterator first, InputIterator last);
or
iterator insert (const_iterator position, value_type&& val);
or
iterator insert (const_iterator position, initializer_list<value_type> il);

引數

  • position - 指示容器中插入新元素的位置。
  • val - 指示要分配給新插入元素的值。
  • n - 指示要插入的元素數量。
  • first, last - 指示指定元素範圍的迭代器。
  • il - 指示一個 initializer_list 物件。

返回值

它返回一個指向新插入元素的迭代器。

異常

如果重新分配失敗,則丟擲 bad_alloc 異常。

時間複雜度

此函式的時間複雜度為線性,即 O(n)

示例

讓我們看下面的例子,我們將在這個例子中在雙端佇列的開頭插入元素。

#include <iostream>
#include <deque>
int main()
{
    std::deque<char> a = {'B', 'C', 'D'};
    a.insert(a.begin(), 'A');
    for (auto x = a.begin(); x != a.end(); ++x) {
        std::cout << *x << " ";
    }
    std::cout << std::endl;
    return 0;
}

輸出

以下是上述程式碼的輸出 -

A B C D

示例

考慮下面的例子,我們將在這個例子中使用範圍版本插入元素。

#include <iostream>
#include <deque>
#include <vector>
int main()
{
    std::deque<char> a = {'A', 'B', 'C'};
    std::vector<char> b = {'D', 'E'};
    a.insert(a.begin() + 1, b.begin(), b.end());
    for (auto x = a.begin(); x != a.end(); ++x) {
        std::cout << *x << " ";
    }
    std::cout << std::endl;
    return 0;
}

輸出

上述程式碼的輸出如下 -

A D E B C

示例

在下面的例子中,我們將使用初始化列表版本插入元素。

#include <iostream>
#include <deque>
int main()
{
    std::deque<int> a = {1,22,333};
    a.insert(a.begin() + 1, {421, 532});
    for (auto x = a.begin(); x != a.end(); ++x) {
        std::cout << *x << " ";
    }
    std::cout << std::endl;
    return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出 -

1 421 532 22 333

示例

以下示例演示瞭如何使用移動版本插入元素。

#include <iostream>
#include <deque>
#include <algorithm>
int main()
{
    std::deque<int> a = {01, 12, 23};
    std::vector<int> b = {34, 45};
    std::move(b.begin(), b.end(), std::inserter(a, a.begin() + 1));
    for (auto x = a.begin(); x != a.end(); ++x) {
        std::cout << *x << " ";
    }
    std::cout << std::endl;
    return 0;
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果 -

1 34 45 12 23
deque.htm
廣告