【问题标题】:Is there a reason that std::string methods have a diffrent style than rest of STL [duplicate]std::string 方法的风格与 STL 的其他部分不同吗?
【发布时间】:2013-04-30 16:56:42
【问题描述】:

我一直想知道为什么字符串方法与其他容器的方法不同,例如 std::map... 一个例子我的意思是这样的:

size_t find (char c, size_t pos = 0) const

请注意,返回值不是迭代器。 那么 std::string 是不是有一些“合法”的原因,除了显而易见的:委员会做了一个布布,字符串坏了......

顺便说一句,我知道有些人不考虑 STL 的字符串部分,你可以假装我问为什么字符串与 std 中的容器不同?

【问题讨论】:

  • @Salgar 我的问题不是关于那个特定功能,但那个 Q 上的 A 实际上是我想知道的......自动关闭我的 Q
  • STL 代表标准模板库。您可以将字符串视为 vector 的应用程序,因此它甚至与任何这些容器都不在同一级别。

标签: c++ string stl


【解决方案1】:

是的。

因为 std::string 不是容器,这些操作是常用的。

您可以将其视为容器的特化。 std::vector<char>。专为特定用途而设计。并提供对该类型和用途有用的方法。

这样想,为什么还要std::string?当你想表示字符串时,为什么不使用std::vector<char>?只是方便

【讨论】:

  • 它仍然遵守通常的容器界面。
  • @ChristianRau 但它不是一个容器。问题是为什么 std::string 甚至在那里? (为什么 std::vector 还不够?)
  • 没有人争论 find_first_not_ofsubstr 之类的东西的必要性,但这仍然不能解释为什么如果 std::string 的另一半容器函数不能使用迭代器做(这实际上是OP问的问题,而不是为什么std::string::find和朋友在那里,这似乎是你要回答的问题)。
  • @ChristianRau 是的,我明白你的意思。但是如果你想要你提到的功能,总是有vector<char>string 存在是因为它对大多数“字符串”操作都很方便。例如,当我在字符串上找到时,我宁愿得到 size_t 而不是更冗长的迭代器。考虑到您操作字符串的频率,提供方便的方法并没有错。
  • 有效点,但这不是你的答案。
猜你喜欢
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多