【问题标题】:C++ Class that works on array of bytes (like string on chars)适用于字节数组的 C++ 类(如字符上的字符串)
【发布时间】:2014-05-15 05:10:57
【问题描述】:

是否有任何可以像字符串一样使用的 c++ 类。哪个有比较器等所需的所有东西? 我希望有类似字符串类的东西,它适用于字节数组而不是字符。我只是问,因为我不想再写已经存在的东西。我将在 std::map 等中使用这个类。

【问题讨论】:

  • std::vector 有比较器。什么是“等”?
  • @BenjaminLindley 等是其他标准模板。但大多数情况下我会使用地图。我想知道将它存储在向量中是否有效?这个案例没有具体的类吗?
  • 我在第二句中指的是“比较器等”中的等。换句话说,除了比较器之外,您还对哪些其他操作感兴趣?因为比较器被覆盖了。是的,向量和字符串一样有效。它们都是连续的序列容器。

标签: c++ c arrays byte std


【解决方案1】:

这正是std::string 的含义。 char 本质上是 byte。它占用一个字节的空间,并接受所有逻辑和按位运算符(位移:<<>>;逻辑比较:&|;等等)。

如果出于某种原因您需要 std::string 之类的东西,但对于不同的数据类型,只需使用 std::basic_string<DATATYPE>。在 STL 中,string itself is a typedef for basic_string<char>

【讨论】:

  • 但我想 basic_string 使用 strlen 和许多其他与 char* 相关的函数。其中许多函数使用 '\0' 作为数组的结尾。但在我的情况下,当我使用 byte 作为类型时,'\0' 可以位于数组中间的某个位置,而不必位于末尾。
  • @nosbor 不,basic_string 不使用 strlen() 或其他 c-string 函数。 basic_string<char> 被称为 C++ 字符串;它不需要空终止符,您可以在其中任意放置任意数量的空字节。
【解决方案2】:

c++ 中没有 byte 这样的东西。您可以将std::vectorunsigned char 一起使用,其效果类似于Java 中的字节。

typedef unsigned char BYTE;
typedef std::vector<BYTE> ByteString;

【讨论】:

  • 我现在无法查看。是否有机会将其用作 std::map 键类型?我的意思是 std::map var;它会有效地工作吗?
  • 这和std::stringunsigned char一样,你可以使用它,我猜效率将相当于string版本,但主要取决于你如何使用它。跨度>
  • 一个std::vector真的不是这里需要的,也绝对和std::string不一样。有several reasons a basic_string&lt;&gt; is better,更何况这是OP要求的。
猜你喜欢
  • 2021-01-03
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 2013-06-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
相关资源
最近更新 更多