在 C++ STL 中 deque::operator= 和 deque::operator[]

在 C++ STL 中 deque::operator= 和 deque::operator[]

Deque 或双向队列是具有扩展和收缩两端功能的序列容器。它们类似于向量,但在插入和删除元素时更高效地处理末尾和开始。与向量不同,不保证连续的存储分配。

deque::operator=

此运算符用于通过替换现有内容来为容器分配新内容。

它还根据新内容修改大小。

语法:

dequename1 = (dequename2)
参数:
与此相同类型的另一个容器。
结果:
将传递的容器的内容分配给运算符左侧的容器。

示例:

输入:mydeque1 = 1, 2, 3
       mydeque2 = 3, 2, 1, 4
       mydeque1 = mydeque2;
输出:mydeque1 = 3, 2, 1, 4

输入:mydeque1 = 2, 6, 1, 5
       mydeque2 = 3, 2
       mydeque1 = mydeque2;
输出:mydeque1 = 3, 2

错误和异常

1. 如果容器类型不同,则会抛出错误。

2. 否则,它具有基本的无异常抛出保证。

// CPP 程序以说明
// = 运算符实现
#include <deque>
#include <iostream>
using namespace std;
 
int main()
{
    deque<int> mydeque1{ 1, 2, 3 };
    deque<int> mydeque2{ 3, 2, 1, 4 };
    mydeque1 = mydeque2;
    cout << "mydeque1 = ";
    for (auto it = mydeque1.begin(); it != mydeque1.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出:

mydeque1= 3 2 1 4

时间复杂度: O(n)

辅助空间: O(n)

deque::operator[]

此运算符用于引用运算符内部给定位置上存在的元素。它类似于 at() 函数,唯一的区别在于当位置不在 deque 的尺寸范围内时,at() 函数会抛出一个 out-of-range 异常,而此运算符会导致 未定义行为

语法:

dequename[position]
参数:
要获取的元素的位置。
返回值:
给定位置处的元素的直接引用。

示例:

输入:mydeque = 1, 2, 3
       mydeque[2];
输出:3

输入:mydeque = 3, 4, 1, 7, 3
       mydeque[3];
输出:7

错误和异常

1. 如果位置不存在于 deque 中,则显示未定义行为。

2. 否则,它有一个无异常抛出保证。

// CPP 程序以说明
// [] 运算符实现
#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[3];
    return 0;
}

输出:

7

时间复杂度: O(1)

辅助空间: O(n)

应用

给定一个整数 deque,请打印在偶数位置出现的所有整数。

输入: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程序说明
// []运算符的应用
#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[i];
            cout << " ";
        }
    }
    return 0;
}

输出:

1 3 5 7 9

时间复杂度: O(n)。//n是deque的大小。

辅助空间: O(n)

我们以表格的形式来看看它们的区别:

ID deque::operator= deque::operator[]
1. 它用于为容器分配新内容并替换其当前内容。 它用于返回deque容器中位置n的元素的引用。
2. 其语法为 -:deque& operator= (const deque& x); 其语法为 -: reference operator[] (size_type n);
3. 它需要两个参数,即 -: 1. 一个与原类型相同的deque对象 2. 一个初始化列表对象。 它只需要一个参数,即容器中元素的位置。
4. 其复杂度是线性的。 其复杂度是常数。
5. 它在<deque>头文件中定义。 它的迭代器有效性不会改变。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程