C++ STL 中的deque::at() 和 deque::swap()

C++ STL 中的deque::at() 和 deque::swap()

Deque 或双向队列是具有两端扩展和收缩特性的序列容器。它们类似于向量,但在插入和删除元素时更高效,同时也更高效地在开头进行操作。与向量不同的是,不保证连续的存储空间分配。

deque::at()

at() 函数用于引用作为该函数参数给出的 位置 的元素。

语法:

dequename.at(position)

参数:要提取的元素的位置。

返回值:给定位置的元素的直接引用。

举例:

输入:mydeque = 1, 2, 3
     mydeque.at(2);
输出:3

输入:mydeque = 3, 4, 1, 7, 3
     mydeque.at(3);
输出:7

错误和异常

1. 如果双向队列中不存在该位置,则抛出 out_of_range 异常。

2. 除此之外,它具有强无异常抛出保证。

// CPP program to illustrate
// Implementation of at() function
#include <deque>
#include <iostream>
using namespace std;

int main()
{
    deque<int> mydeque;
    mydeque.push_back(3);
    mydeque.push_back(4);
    mydeque.push_back(1);
    mydeque.push_back(7);
    mydeque.push_back(3);
    cout << mydeque.at(3);
    return 0;
} 

输出:

7

应用

给定一个整数双向队列,打印所有出现在偶数位置上的整数。

输入:1, 2, 3, 4, 5, 6, 7, 8, 9
输出:1 3 5 7 9
说明 - 1、3、5、7 和 9 在位置 0、2、4、6 和 8 上,这些位置是偶数位置。

算法

1. 循环直到数组大小。

2. 检查位置是否可以被 2 整除,如果是,则打印该位置的元素。

// CPP program to illustrate
// Application of at() function
#include <deque>
#include <iostream>
using namespace std;

int main()
{
    deque<int> mydeque;
    mydeque.push_back(1);
    mydeque.push_back(2);
    mydeque.push_back(3);
    mydeque.push_back(4);
    mydeque.push_back(5);
    mydeque.push_back(6);
    mydeque.push_back(7);
    mydeque.push_back(8);
    mydeque.push_back(9);
    // Deque becomes 1, 2, 3, 4, 5, 6, 7, 8, 9

    for (int i = 0; i < mydeque.size(); ++i) {
        if (i % 2 == 0) {
            cout << mydeque.at(i);
            cout << " ";
        }
    }
    return 0;
}

输出:

1 3 5 7 9

deque::swap()

这个函数用于交换另一个相同类型和大小的双向队列的内容。

语法:
dequename1.swap(dequename2)

参数:
需要与其内容交换的双向队列的名称。

结果:两个双向队列的所有元素都被互换。

举例:

输入:mydeque1 = {1, 2, 3, 4}
      mydeque2 = {3, 5, 7, 9}
      mydeque1.swap(mydeque2);
输出:mydeque1 = {3, 5, 7, 9}
      mydeque2 = {1, 2, 3, 4}

输入:mydeque1 = {1, 3, 5, 7}
      mydeque2 = {2, 4, 6, 8}
      mydeque1.swap(mydeque2);
输出:mydeque1 = {2, 4, 6, 8}
      mydeque2 = {1, 3, 5, 7}

错误和异常 1.如果deque不是相同类型,则会引发错误。 2.如果deque不是相同大小,则会引发错误。 否则它具有基本的无异常抛出保证。

//CPP程序说明
//swap()函数实现
# include
# include
using namespace std;

int main()
{
    // deque container declaration
    deque mydeque1{ 1, 2, 3, 4 };
    deque mydeque2{ 3, 5, 7, 9 };

    // using swap() function to swap elements of deques
    mydeque1.swap(mydeque2);

    // printing the first deque
    cout << "mydeque1 = ";
    for (auto it = mydeque1.begin(); it < mydeque1.end(); ++it)
        cout << *it << " ";

    // printing the second deque
    cout << endl
         << "mydeque2 = ";
    for (auto it = mydeque2.begin(); it < mydeque2.end(); ++it)
        cout << *it << " ";
    return 0;
} 

输出:

mydeque1 = 3 5 7 9
mydeque2 = 1 2 3 4 

时间复杂度: O(n). //n是deque中元素的数量。

辅助空间: O(n)。

让我们以表格形式看到差异-:

ID deque::at() deque::swap()
1. 它用于返回deque容器对象中位置n处的元素的引用。 它用于交换容器的内容,以及另一个包含相同类型元素的容器的内容。
2. 它的语法是:-:参考at(size_type n); 它的语法是:-:swap(deque& x);
3. 它只接受一个参数,即容器中元素的位置。 它只接受一个参数,即我们想要交换元素的队列。
4. 它的复杂度是恒定的。 它没有任何返回值。
5. 它的迭代器有效性不会改变。 它的复杂度是恒定的。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程