📜  C++ STL中的deque :: clear()和deque :: erase()(1)

📅  最后修改于: 2023-12-03 15:13:56.250000             🧑  作者: Mango

deque :: clear() 和 deque :: erase()

在C++的STL中,deque被定义为双端队列容器,支持在队列的两端进行插入和删除操作。在本文中,我们将分别介绍 deque :: clear() 和 deque :: erase() 的用法和区别。

deque :: clear()

deque :: clear() 用于删除 deque 中的所有元素。其函数签名如下:

void clear() noexcept;

其函数原型只有一个参数,即无需传入任何参数。该函数会使 deque 中的所有元素被销毁,并将 deque 的大小(size)设置为 0。

示例代码

下面是一个使用 deque :: clear() 删除 deque 所有元素的示例:

#include <iostream>
#include <deque>

int main()
{
    std::deque<int> mydeque {1, 2, 3, 4, 5};

    std::cout << "Deque size is: " << mydeque.size() << "\n";

    mydeque.clear();

    std::cout << "Deque size after clearing is: " << mydeque.size() << "\n";

    return 0;
}

该代码会输出以下内容:

Deque size is: 5
Deque size after clearing is: 0

在本示例中,使用 clear() 函数后,mydeque deque 中的所有元素被销毁,deque 的大小(size)被设置为 0。

deque :: erase()

deque :: erase() 用于删除 deque 中的特定元素或一定范围内的元素。其函数签名如下:

iterator erase (const_iterator position);
iterator erase (const_iterator first, const_iterator last);

其中,第一个函数原型用于删除指定迭代器指向的元素,第二个函数原型用于删除指定迭代器范围内的元素。

示例代码

下面是一个使用 deque :: erase() 删除 deque 中指定迭代器指向的元素的示例:

#include <iostream>
#include <deque>

int main()
{
    std::deque<int> mydeque {1, 2, 3, 4, 5};

    auto it = mydeque.begin() + 2;
    mydeque.erase(it);

    std::cout << "Deque after erasing at position 2: ";
    for (int& x : mydeque)
        std::cout << x << " ";
    std::cout << "\n";

    return 0;
}

该代码会输出以下内容:

Deque after erasing at position 2: 1 2 4 5

在本示例中,使用 erase() 函数后,mydeque deque 中 3 这个元素被删除,deque 中的其它元素会被移动以填补这个位置。

下面是使用 deque :: erase() 删除 deque 中指定范围内的元素的示例:

#include <iostream>
#include <deque>

int main()
{
    std::deque<int> mydeque {1, 2, 3, 4, 5};

    auto first = mydeque.begin() + 1;
    auto last = mydeque.begin() + 3;
    mydeque.erase(first, last);

    std::cout << "Deque after erasing range [1,3): ";
    for (int& x : mydeque)
        std::cout << x << " ";
    std::cout << "\n";

    return 0;
}

该代码会输出以下内容:

Deque after erasing range [1,3): 1 4 5

在本示例中,使用 erase() 函数后,mydeque deque 中 2 和 3 这两个元素被删除,deque 中的其它元素会被移动以填补这两个位置。