在C++中deque::assign和deque::at之间的区别

在C++中deque::assign和deque::at之间的区别

deque是C++ STL中的一个双端队列容器,可以高效地在两端进行元素的插入和删除操作。在使用deque时,我们可能需要使用到其两个成员函数:assignat。这两个函数在功能上有些相似,但是在使用时还是需要注意其中的不同点。

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;

其中,referenceconst_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

区别点

  1. 功能不同:assign用于赋值,即改变deque中的数据;at用于访问,即获取deque中的数据。
  2. 参数不同:assign需要传入元素个数和元素值;at需要传入元素的下标。
  3. 返回值不同:assign无返回值;at返回元素的引用。
  4. 异常处理不同:assign不会抛出异常;at在访问越界时会抛出std::out_of_range异常。

结论

在使用deque时,我们需要根据具体的需求选择使用assign或是at函数。assign可用于清空并重新赋值deque中的数据,或是将一组简单的数据快速地填充到deque中;而at则可以方便地定位任意位置的deque元素并进行访问。同时还需要注意两个函数的参数和返回值不同,以及at函数在访问越界时会抛出异常。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程