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
广告

© . All rights reserved.