在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
函数在访问越界时会抛出异常。