📅  最后修改于: 2023-12-03 15:13:56.235000             🧑  作者: Mango
deque是C++ STL中的一种容器,它是一种双端队列,与vector类似,但deque的插入和删除操作更加高效,因为它支持在两端进行插入和删除操作。
deque::at()是deque容器的成员函数之一,用于返回指定索引位置的元素的引用,而deque::swap()则是用于交换两个deque容器的元素。
本文将深入探讨deque::at()和deque::swap()的用法和示例。
deque::at()的语法如下:
reference at (size_type n);
const_reference at (size_type n) const;
其中,n表示要访问的元素的索引位置,返回类型为引用类型。第一种语法返回的是非常量引用,可以用于修改元素的值;第二种语法返回的则是常量引用,不能用于修改元素的值。
deque::at()会检查是否越界,如果索引n超出了deque容器的范围,则会抛出out_of_range异常。
以下是一个使用deque::at()的示例代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> mydeque = {1, 2, 3, 4, 5};
try {
int& ref1 = mydeque.at(2);
const int& ref2 = mydeque.at(4);
ref1 = 10;
// ref2 = 20; 编译器会报错,因为ref2是常量引用
for (auto i : mydeque)
cout << i << " ";
cout << endl;
int& ref3 = mydeque.at(10); // 会抛出out_of_range异常
} catch (const std::out_of_range& e) {
std::cerr << e.what() << '\n';
}
return 0;
}
在此示例中,我们使用了deque::at()来修改元素的值,并且通过try-catch语句处理了可能会抛出的异常。
输出结果:
1 2 10 4 5
deque::at: invalid argument
deque::swap()的语法如下:
void swap (deque& x) noexcept (/* 见注释 */);
该函数的作用是交换当前deque容器和另一个deque容器x的所有元素。
注意,该函数并不会释放已有的内存,也不会为新的元素分配内存,只会交换两个deque对象的指针,因此时间复杂度很低。
以下是一个使用deque::swap()的示例代码:
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> deque1 = {1, 2, 3, 4, 5};
deque<int> deque2 = {6, 7, 8, 9, 10};
cout << "deque1: ";
for (auto i : deque1)
cout << i << " ";
cout << endl;
cout << "deque2: ";
for (auto i : deque2)
cout << i << " ";
cout << endl;
deque1.swap(deque2);
cout << "deque1: ";
for (auto i : deque1)
cout << i << " ";
cout << endl;
cout << "deque2: ";
for (auto i : deque2)
cout << i << " ";
cout << endl;
return 0;
}
在此示例中,我们使用了deque::swap()函数来交换两个deque对象的元素。
输出结果:
deque1: 1 2 3 4 5
deque2: 6 7 8 9 10
deque1: 6 7 8 9 10
deque2: 1 2 3 4 5
deque::at()和deque::swap()是C++ STL中deque容器的两个重要成员函数,它们都可以给程序员带来很大的便利。使用deque::at()可以方便地访问deque容器中指定位置的元素,而使用deque::swap()可以方便地交换两个deque对象中元素的位置。程序员应根据具体的需求选择合适的函数。