在 C++ STL 中的deque::at() 和 deque::swap()
C++ STL(Standard Template Library)是C++标准程序库中的一个重要组成部分,它包含了许多通用的数据结构和算法模板。其中两个常用的deque函数是deque::at()和deque::swap()。 通过本文来深入了解这两个函数。
deque::at()
deque是一种容器,其功能类似于 vector,即动态数组,但是可以从前面或后面插入或删除元素。 然而,与vector不同,deque不仅具有随机存取迭代器,还具有双向迭代器,即可以从前向后或从后向前遍历它的元素。这就是deque的优点之一。
在deque中,使用at()函数来访问指定位置的元素。 以下是at()函数的语法及示例代码:
// 语法
reference at(size_type n)
const_reference at(size_type n) const;
// 示例代码
#include <iostream>
#include <deque>
using namespace std;
int main(){
deque<int> myDeque {1,2,3,4,5};
cout << "Value at position 3 is: " << myDeque.at(3) << endl;
// 访问deque之外的位置
try{
cout << "Value at position 10 is: " << myDeque.at(10) << endl;
}
catch (const std::out_of_range& oor){
std::cerr << "Out of range error: " << oor.what() << endl;
}
return 0;
}
在这个例子中,我们首先创建了一个有5个元素的deque对象。然后我们使用at()函数来访问在第三个位置上的元素。 接下来,我们使用at()函数来访问deque之外的位置,即我们的deque仅包含5个元素,但我们尝试访问第10个位置上的元素。 由于该元素不存在,它将引发一个out_of_range异常,并输出相应的错误消息。
deque::swap()
我们已经了解了deque::at(),现在来了解另一个有用的deque函数 deque::swap()。 deque::swap()用于交换两个deque对象之间的内容。以下是swap()函数的语法及示例代码:
// 语法
void swap(deque& x);
template<class T, class Alloc>
void swap(deque<T,Alloc>& x, deque<T,Alloc>& y);
// 示例代码
#include <iostream>
#include <deque>
using namespace std;
int main(){
deque<int> dequeOne {1, 2, 3};
deque<int> dequeTwo {4, 5};
cout<<"Original deques: \n";
cout<<"Deque One: ";
for (auto i : dequeOne) cout << i << " ";
cout << endl;
cout<<"Deque Two: ";
for (auto i : dequeTwo) cout << i << " ";
cout << endl;
dequeOne.swap(dequeTwo);
cout << "\nDeques after swap(): \n";
cout<<"Deque One: ";
for (auto i : dequeOne) cout << i << " ";
cout << endl;
cout<<"Deque Two: ";
for (auto i : dequeTwo) cout << i << " ";
cout << endl;
return 0;
}
在上面的代码中,我们首先创建了两个deque对象dequeOne和dequeTwo,并在每个deque对象中分别插入了几个整数。 然后我们使用swap()函数交换了两个deque对象中的元素。显然,dequeOne中的所有元素都移到了dequeTwo中,反之亦然。
结论
在本文中,我们介绍了deque::at()和deque::swap()这两个有用的deque函数。使用at()函数可以方便地访问一个deque容器中的指定元素,并且在访问不属于deque容器范围的位置时,它会抛出一个异常。而使用swap()函数可以交换两个deque容器中的内容,从而实现快速有效的容器操作。这两个函数都能使我们更加方便地操作deque容器,并提高代码的效率和可读性。