C++ STL中的deque resize()函数
前言
在程序设计中,常常需要使用队列这种数据结构。STL中的deque(双端队列)就是一种方便使用的队列容器,它可以在开始或结尾插入或删除元素,能够非常高效地处理大数据量的入队或出队操作,是STL中比较常用的容器之一。在使用deque的时候,可能会遇到需要改变队列大小的情况,这时候就需要用到resize()函数。
resize()函数介绍
deque的resize()函数的作用是将一个deque对象的大小(即内部存储元素的数量)改变为指定大小。具体来说,resize()函数接受一个size_t类型的参数n,调用后deque对象的大小将变为n,如果n小于当前的大小,则从结尾开始删除元素;如果n大于当前的大小,则从结尾开始插入默认值为0的元素,直到大小为n。
该函数的函数原型如下:
void resize(size_t n, const value_type& val = value_type())
其中,n表示新的大小,val表示新插入的元素的默认值(该参数可选,默认为0)。
resize()函数示例
接下来,我们通过几个示例来演示deque的resize()函数的用法。
示例1:将队列大小变为指定大小
下面的代码演示了如何使用resize()函数将队列大小变为指定的大小。
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> mydeque;
// 在队列末尾插入元素
for (int i = 1; i <= 5; ++i) mydeque.push_back(i * 10);
// 输出原先队列元素
cout << "原先队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
// 将队列大小变为10
mydeque.resize(10);
// 输出变化后队列元素
cout << "变化后队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
return 0;
}
输出结果为:
原先队列的元素: 10 20 30 40 50
变化后队列的元素: 10 20 30 40 50 0 0 0 0 0
示例2:在指定位置插入默认值为0的元素
下面的代码演示了在指定位置插入默认值为0的元素。
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> mydeque;
// 在队列末尾插入元素
for (int i = 1; i <= 5; ++i) mydeque.push_back(i * 10);
// 输出原先队列元素
cout << "原先队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
// 在指定位置插入默认值为0的元素,并输出变化后队列元素
auto it = mydeque.begin() + 3;
mydeque.resize(8);
mydeque.insert(it, 2, 0);
cout << "变化后队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
return 0;
}
输出结果为:
原先队列的元素: 10 20 30 40 50
变化后队列的元素: 10 20 30 0 0 40 50 0
示例3:从队列末尾删除元下面的代码演示了从队列末尾删除元素。
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<int> mydeque;
// 在队列末尾插入元素
for (int i = 1; i <= 5; ++i) mydeque.push_back(i * 10);
// 输出原先队列元素
cout << "原先队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
// 从队列末尾删除2个元素,并输出变化后队列元素
mydeque.resize(3);
cout << "变化后队列的元素:";
for (auto it = mydeque.begin(); it != mydeque.end(); ++it) cout << ' ' << *it;
cout << endl;
return 0;
}
输出结果为:
原先队列的元素: 10 20 30 40 50
变化后队列的元素: 10 20 30
注意事项
在使用resize()函数时,需要注意以下几点:
- 当将deque对象大小缩小时,如果对象中存储的是自定义类型的元素,那么需要自己负责删除多余的元素;
- 在将deque对象大小增大时,resize()函数会增加多余的元素,并将这些元素的值设置为默认值。如果需要使用自定义的默认值,需要传递一个value_type类型的对象作为第二个参数;
- resize()函数改变的是deque对象的大小,而不是容量。因此,在将deque对象大小增大时,需要确保容器的容量可以容纳新插入的所有元素,可以使用reserve()函数改变容器的容量。
结论
到此为止,C++ STL中的deque resize()函数的介绍就结束了。我们学习了resize()函数的作用、函数原型和注意事项,并通过几段代码演示了resize()函数的用法。在实际使用中,需要根据具体情况选择合适的参数,才能充分利用deque的优势,编写出高效的程序。