C++ STL中的deque resize()函数

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的优势,编写出高效的程序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程