【问题标题】:Why does `std::set::erase(const key_type&)` return `size_type` instead of `bool`?为什么`std::set::erase(const key_type&)`返回`size_type`而不是`bool`?
【发布时间】:2019-11-19 03:36:50
【问题描述】:

因为std::set 不会重复insert(),所以可以确保包含唯一元素。当使用重载erase(const key_type&) 时,它的对象将包含最多 1 个相同值的元素。因此,它可能返回 1(如果存在)或 0(否则)。

erase(const key_type&) 什么时候可以返回超过 1 个?
换句话说,返回size_type 而不是简单的bool 的目的是什么?

【问题讨论】:

  • erase-remove idiom 是一种常见的 C++ 技术,用于从 C++ 标准库容器中删除满足特定条件的元素。 “不是删除元素,而是删除运算符放置元素,不符合条件的,在给定范围的末尾,然后返回一个迭代器,该迭代器指向最后一个匹配元素之后的一个元素。然后擦除成员函数将元素从返回的迭代器中删除到给定的迭代器。"

标签: c++ language-lawyer return-type stdset erase-remove-idiom


【解决方案1】:

返回size_type的目的是一致性;所有关联容器都有一个erase 方法,它接受一个键类型并返回一个大小。即使大小只能是零或一,它仍然是相同的界面。

【讨论】:

  • 事先知道这个原因,忘记在我的 Qn 中提及以排除这种情况。基本上我想知道除此之外的任何其他意图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2021-06-01
相关资源
最近更新 更多