C++ set erase()

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

C++ set 的 **erase()** 函数用于从 set 容器中移除与给定键关联的单个元素,或移除一个范围 ([first, last)) 的元素。因此,大小将根据移除的元素数量而减少。

语法

参数

**position**:指向要从 set 中移除的单个元素的迭代器。

**val**:要从 set 中移除的值。

first: 要擦除范围的起始。

last: 要擦除范围的结束。

返回值

它返回一个指向被删除元素之后元素的迭代器,或者返回被删除元素的数量。

复杂度

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

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

**erase(first,last)**:与 first 和 last 之间的距离呈线性关系。

迭代器有效性

指向被函数移除的元素的迭代器、引用和指针将失效。

所有其他迭代器、指针和引用保持其有效性。

数据竞争

容器被修改。

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

异常安全

此函数不会抛出异常。

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

示例 1

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

输出

Before erasing the element: 
10
20
30

After erasing the element: 
10
20
30

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

示例 2

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

输出

Before erasing the element: 
10
20
30
40

After erasing the element: 
10
20
40

在上面的例子中,erase(value) 函数从 set 中移除了值 30。

示例 3

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

输出

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

After erasing the element are: 
Size is: 0

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

示例 4

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

输出

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

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

示例 5

让我们看另一个例子

输出

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

After the 2nd element is deleted, the set s1 is:
 [Bert] [Bobby] [Rob] [Robert]
size() == 4

Starting data of set s2 is:
 [growl] [hiss] [meow] [purr] [yowl]
size() == 5

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

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

The number of elements removed from s3 is: 1.
After the element with a key of "E#" is deleted, the set s3 is:
 [A] [A#] [B] [C] [C#] [D] [D#] [E] [F] [F#] [G] [G#]
size() == 12

下一个主题Set swap() 函数