【问题标题】:C++ strings vs vector<char> [duplicate]C ++字符串与向量<char> [重复]
【发布时间】:2015-10-14 17:56:29
【问题描述】:

我们每个人都知道,对于所有字符串应用程序,我们应该更喜欢 C++ 中的 string 类,因为它们执行许多特殊功能以及动态增长和减少的能力。 string 用于charactersvector 用于其他数据类型和类,因为它显示了出色的性能。

但是,在任何情况下,我们需要更喜欢vector&lt;char&gt;(我很少看到)而不是string

【问题讨论】:

  • 处理二进制数据时?
  • 根本不是@NathanOliver
  • @CppNITR 如果您正在读取二进制文件,您希望将其存储在 std::vector&lt;char&gt; 中,请考虑任何不是文本的文件(例如可执行文件)
  • 这些是可以互换的,std::string 只是提供了额外的功能。
  • vector 是一个容器,string 是一个字符串。

标签: c++ string vector


【解决方案1】:

只有当我明确打算存储一个不是字符串的 char 值数组时,我才会使用 vector&lt;char&gt;。例如。如果出于某种原因我要收集特定文本中某处使用的所有字符,结果可能是vector&lt;char&gt;

要明确:这完全是为了表达意图。

【讨论】:

  • 明确一点:这是关于表达意图。
  • 好评。属于答案。我建议对答案进行编辑以击败这一点。
  • 你也可以用字符串做同样的事情,因为字符串也有向量使用的 push_back、pop_back 等类型函数
  • @cdonat,我猜 CppNITR 提出的疑问是有效的,至少提供更好的理由
  • @CppNITR 是的,但这与其他任何事情一样都是可读性问题。您的代码的读者看到string,他们会期望某些事情是真实的,其中最重要的是字符串变量包含可读且可能可打印的文本。 vector 包含。它包含的内容因模板参数而异,并且内容的解释范围更广。
【解决方案2】:

简而言之:如果您要存储文本,则为string,否则为vector&lt;char&gt;

【讨论】:

  • 你介意用一个很好的例子来详细说明
  • 如果它是一个字节数组,你不会使用 unsigned char 代替 char 吗?
  • @quser 在这种情况下,我更喜欢 vector&lt;byte&gt;using byte = char; 以明确它存储的是原始二进制数据而不是字符。请参阅 this answer 为什么是 char 而不是 unsigned char
  • C++ 标准库本身也使用char,而不是unsigned char,用于二进制 I/O,例如ostream::write。因此,您可以避免使用 using byte = char 进行很多讨厌的演员阵容。
  • @zenith:你的意思是如果我用 unsigned char 代替会有问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-04
  • 2012-08-16
  • 2012-01-16
  • 2013-08-17
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多