C++ multiset erase()

2024年8月30日 | 5分钟阅读

C++ Multimultiset erase() 函数用于从 multiset 容器中移除与给定键相关联的单个元素或范围内的元素 ([first, last))。因此,大小将减少被移除元素的数量。

语法

参数

position: 指向要从容器中移除的元素的迭代器。

val: 要从 multiset 中移除的值。

first: 要擦除范围的起始。

last: 要擦除范围的结束。

返回值

erase() 函数返回一个指向已删除元素的下一个元素的迭代器,或者返回已删除元素的数量。

复杂度

erase(position): 摊销常数时间。

erase (val): 对容器大小取对数时间。

erase(first,last): 在容器中 first 和 last 之间的距离上是线性的。

迭代器有效性

指向被函数移除的元素的迭代器、引用和指针会失效。所有其他迭代器、指针和引用保持有效。

数据竞争

容器被修改。

被移除的元素被修改。在容器中迭代范围是不安全的,尽管并发访问其他元素是安全的。

异常安全

此函数不会抛出异常。

如果指定了无效范围或位置,则会导致未定义行为。

示例 1

让我们看一个使用迭代器擦除元素的简单示例。

输出

Before erasing the element: 
10
20
20
30

After erasing the element: 
10
20
20
30

在上面的示例中,元素通过迭代器 'it' 擦除。

示例 2

让我们看一个简单的例子来擦除给定键值的 multiset 元素

输出

Before erasing the element: 
10
10
20
30
30
40

After erasing the element: 
10
10
20
40

在上面的示例中,erase(value) 函数从 multiset 中使用值 30。

示例 3

让我们看一个使用给定范围擦除元素的简单示例

输出

Before erasing the element are: 
Size is: 3
10
20
30

After erasing the element are: 
Size is: 0

在上面的示例中,erase(first, last) 函数用于擦除给定范围(即从头到尾)的元素。

示例 4

让我们看一个简单的例子来擦除 multiset 中的所有奇数

输出

After erasing odd numbers, elements are:
 2, 4, 4, 6, 8, 10, 10, 12,

在上面的示例中,所有奇数都被擦除,并显示偶数。

示例 5

让我们看另一个例子

输出

Starting data of multiset s1 is:
 [Bob] [Bob] [Rob] [Rob] [Robert]
size() == 5

After the 2nd element is deleted, the multiset s1 is:
 [Bob] [Rob] [Rob] [Robert]
size() == 4

Starting data of multiset s2 is:
 [growl] [meow] [nikita] [nikita] [yellow]
size() == 5

After the middle elements are deleted, the multiset s2 is:
 [growl] [yellow]
size() == 2

Starting data of multiset s3 is:
 [B] [C] [C#] [D] [D#] [E] [E] [E#] [E#] [F] [F#] [G] [G#]
size() == 13

The number of elements removed from s3 is: 2.
After the element with a key of "E#" is deleted, the multiset s3 is:
 [B] [C] [C#] [D] [D#] [E] [E] [F] [F#] [G] [G#]
size() == 11
下一个主题C++ multiset