C++ STL 按值设置擦除

Ada*_*han 7 c++ stl set

我想从std::set.

我知道最好和直接的做法是使用set<T>::find(T val)方法检查它在集合中的存在,然后使用返回的set<T>::iterator. 但我希望使用按值擦除的速记方法。

尽管std::set确实通过重载函数提供了set<T>::erase(T val)此处列出的值擦除的功能,但我无法找到如果该值不存在于集合中会发生什么。

正如人们直觉所期望的那样,如果参数值在集合中不存在,它是否什么都不做?是否保证它不会抛出任何错误/异常?

Who*_*aig 7

std::set遵守26.2.6 associative.reqmts的关联容器要求。

它返回实际擦除元素的数量,std::set必须为零或一,具体取决于存在。根据26.2.6.1 associative.reqmts.except,只有在搜索期间使用容器比较器(显然可以自定义)不抛出时,才保证不抛出。


InQ*_*ive 5

来自cplusplus

(1) void擦除(迭代器位置);

(2) size_type擦除(const value_type&val);

(3) void擦除(迭代器在前,迭代器在后);

返回值

对于基于值的版本 (2),该函数返回已擦除元素的数量。

成员类型 size_type 是无符号整型


所以如果没有元素被删除它返回0。

  • 再往下,还有一个异常安全主题,描述了“不抛出保证” (2认同)