在C++中deque::assign和deque::at之间的区别
deque是C++ STL中的一个双端队列容器,可以高效地在两端进行元素的插入和删除操作。在使用deque时,我们可能需要使用到其两个成员函数:assign和at。这两个函数在功能上有些相似,但是在使用时还是需要注意其中的不同点。
deque::assign
assign函数的作用是将n个值为val的元素赋值给deque,即重新指定deque的元素个数和值。其函数声明如下:
void assign(size_type n, const value_type& val);
其中,size_type是无符号整型,代表元素个数的类型;value_type是deque中元素的类型,而val则是需要赋值的元素值。
示例代码如下:
#include <iostream>
#include <deque>
using namespace std;
int main()
{
    deque<int> myDeque;
    myDeque.assign(5, 10);
    cout << "myDeque contains:";
    for (auto it = myDeque.begin(); it != myDeque.end(); ++it)
        cout << ' ' << *it;
    cout << '\n';
    return 0;
}
输出:
myDeque contains: 10 10 10 10 10
deque::at
at函数的作用是返回deque指定位置的元素的引用,即可用于访问deque中任一位置的元素。其函数声明如下:
reference at(size_type n);
const_reference at(size_type n) const;
其中,reference及const_reference均为元素类型的引用,返回值为deque中指定位置的元素的引用。注意:如果指定位置超出deque有效范围,则会抛出异常std::out_of_range。
示例代码如下:
#include <iostream>
#include <deque>
using namespace std;
int main()
{
    deque<int> myDeque;
    myDeque.push_back(10);
    myDeque.push_back(20);
    myDeque.push_back(30);
    int& first = myDeque.at(0);
    int& last = myDeque.at(2);
    cout << "First element is: " << first << '\n';
    cout << "Last element is: " << last << '\n';
    return 0;
}
输出:
First element is: 10
Last element is: 30
区别点
- 功能不同:assign用于赋值,即改变deque中的数据;at用于访问,即获取deque中的数据。
- 参数不同:assign需要传入元素个数和元素值;at需要传入元素的下标。
- 返回值不同:assign无返回值;at返回元素的引用。
- 异常处理不同:assign不会抛出异常;at在访问越界时会抛出std::out_of_range异常。
结论
在使用deque时,我们需要根据具体的需求选择使用assign或是at函数。assign可用于清空并重新赋值deque中的数据,或是将一组简单的数据快速地填充到deque中;而at则可以方便地定位任意位置的deque元素并进行访问。同时还需要注意两个函数的参数和返回值不同,以及at函数在访问越界时会抛出异常。
 极客笔记
极客笔记