适用于字节数组的 C++ 类(如字符上的字符串)
Posted
技术标签:
【中文标题】适用于字节数组的 C++ 类(如字符上的字符串)【英文标题】:C++ Class that works on array of bytes (like string on chars) 【发布时间】:2014-05-15 05:10:57 【问题描述】:是否有任何可以像字符串一样使用的 c++ 类。哪个有比较器等所需的所有东西? 我希望有类似字符串类的东西,它适用于字节数组而不是字符。我只是问,因为我不想再写已经存在的东西。我将在 std::map 等中使用这个类。
【问题讨论】:
std::vector
有比较器。什么是“等”?
sizeof(char)
is 1
(it is one byte in size)
@BenjaminLindley 等是其他标准模板。但大多数情况下我会使用地图。我想知道将它存储在向量中是否有效?这个案例没有具体的类吗?
我在第二句中指的是“比较器等”中的等。换句话说,除了比较器之外,您还对哪些其他操作感兴趣?因为比较器被覆盖了。是的,向量和字符串一样有效。它们都是连续的序列容器。
【参考方案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::vector
与unsigned char
一起使用,其效果类似于Java
中的字节。
typedef unsigned char BYTE;
typedef std::vector<BYTE> ByteString;
【讨论】:
我现在无法查看。是否有机会将其用作 std::map 键类型?我的意思是 std::mapstd::string
和unsigned char
一样,你可以使用它,我猜效率将相当于string
版本,但主要取决于你如何使用它。跨度>
一个std::vector
真的不是这里需要的,也绝对和std::string
不一样。有several reasons a basic_string<>
is better,更何况这是OP要求的。以上是关于适用于字节数组的 C++ 类(如字符上的字符串)的主要内容,如果未能解决你的问题,请参考以下文章