📜  C++ STL中的deque :: at()和deque :: swap()(1)

📅  最后修改于: 2023-12-03 15:13:56.235000             🧑  作者: Mango

C++ STL中的deque::at()和deque::swap()

概述

deque是C++ STL中的一种容器,它是一种双端队列,与vector类似,但deque的插入和删除操作更加高效,因为它支持在两端进行插入和删除操作。

deque::at()是deque容器的成员函数之一,用于返回指定索引位置的元素的引用,而deque::swap()则是用于交换两个deque容器的元素。

本文将深入探讨deque::at()和deque::swap()的用法和示例。

deque::at()

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()

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对象中元素的位置。程序员应根据具体的需求选择合适的函数。