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. | 它的迭代器有效性不会改变。 | 它的复杂度是恒定的。 |