在 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> 头文件中定义。 |
它的迭代器有效性不会改变。 |