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

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

双端队列或Deque是具有在两端扩展和收缩功能的序列容器。它们类似于向量,但在元素在结尾和开头插入和删除的情况下更有效。与向量不同,可能无法保证连续存储分配。

deque :: clear()

clear () 函数用于删除deque容器的所有元素,从而使其大小为0。

语法:

dequename.clear()
参数:不传递参数。
结果:删除(或销毁)deque的所有元素

示例:

输入: mydeque = {1, 2, 3, 4, 5}

mydeque.clear();

输出 : mydeque = {}

输入: mydeque = {}

mydeque.clear();

输出: mydeque = {}

错误和异常:

1. 如果未传递参数,则没有异常抛出保证。

2. 如果传递参数,则会显示错误。

// CPP程序说明
// clear ()函数的实现
#include 
#include 
using namespace std;

int main()
{
    deque mydeque{ 1, 2, 3, 4, 5 };

    mydeque.clear();
    // deque变为空

    // 打印deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

deque :: erase()

erase() 函数用于从指定位置或范围中的容器中删除元素。

语法:

  1. dequename.erase(position)

  2. dequename.erase(startingposition, endingposition)

参数:
元素的位置,以迭代器的形式给出。或使用起始位置和结束位置的范围,即[start iterator,end iterator)
结果:
从容器的指定位置删除元素。

示例:

输入: mydeque {1, 2, 3, 4, 5},迭代器= 2

mydeque.erase(iterator);

输出: 1、2、4、5

输入: mydeque{1, 2, 3, 4, 5, 6, 7, 8},迭代器1= 3,迭代器2= 6

mydeque.erase(iterator1, iterator2);

输出: 1、2、3、7、8

错误和异常:

1. 如果位置有效,则不会抛出任何异常保证。

2. 否则会显示未定义的行为。

从特定位置删除元素

// CPP程序说明
// erase()函数的实现
# include
# include
using namespace std;

int main()
{
    deque mydeque{ 1, 2, 3, 4, 5 };
    deque::iterator it;

    it = mydeque.begin();
    mydeque.erase(it);

    // 打印deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出

 2 3 4 5

在范围内删除元素

// CPP程序演示
// 实现erase()函数
# include
# include
using namespace std;

int main()
{
    deque mydeque{1, 2, 3, 4, 5};
    deque::iterator it1, it2;

    it1 = mydeque.begin();
    it2 = mydeque.end();
    it2--;
    it2--;

    mydeque.erase(it1, it2);

    // 打印deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出

 4 5

应用:

给定一个整数列表,从deque中删除所有偶数元素并打印deque。

输入: 1、2、3、4、5、6、7、8、9

输出: 1 3 5 7 9

说明: 2、4、6和8是偶数,从deque中删除掉

算法:

1. 循环直到deque的大小为止。

2. 检查每个位置的元素是否可以被2整除,如果可以,则删除该元素并递增迭代器,否则仅递增迭代器以检查下一个元素。

3. 打印最终的deque。

// CPP程序演示
// erase()函数的应用
# include
# include
using namespace std;

int main()
{
    deque mydeque{1, 2, 3, 4, 5, 6, 7, 8, 9};
    deque::iterator i;
    i = mydeque.begin();
    while (i != mydeque.end())
    {
        if (*i % 2 == 0) /*如果在循环内部删除,不是一个好主意,如果您删除最后一个元素,mydeque.end()将找不到,导致无限循环*/
            mydeque.erase(i);
        i++;
    }

    //打印deque
    for (auto it = mydeque.begin(); it != mydeque.end(); ++it)
        cout << ' ' << *it;
    return 0;
}

输出

1 3 5 7 9

clear() VS erase()。什么时候使用什么?

clear() 从deque容器中移除所有元素,使其大小为0。使用clear()函数删除deque的所有元素。

erase() 函数用于从容器中删除特定元素或一系列元素,从而将其大小减少所删除的元素数。

让我们以表格形式看到区别:

ID deque::clear() deque::erase()
1. 它用于从deque中删除所有元素 它用于从deque容器中删除单个元素或一系列元素
2. 它的语法是: clear() 它的语法是: 迭代器erase(const_iterator position);
3. 它不接受任何参数。 它的复杂度是线性的。
4. 它没有返回值。 它有两个参数: 1.指向要从deque中删除的单个元素的迭代器。 2.指定要删除的deque中的范围的迭代器
5. 它的复杂度是线性的。 在头文件中定义。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 教程