Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 固定大小字符串类型容器_C++_String_C++11_Stl_Containers - Fatal编程技术网

C++ 固定大小字符串类型容器

C++ 固定大小字符串类型容器,c++,string,c++11,stl,containers,C++,String,C++11,Stl,Containers,我需要一个固定大小的字符串类型的某些要求。现在,我一直在做一个简单的char[20]字符数组来满足这个要求。但是,它缺少我时不时需要的某些stl容器友好属性。例如,对于一个简单的empty(),clear()方法是非常经常需要的,还需要length/size属性或getSize()方法,它们可能返回此属性或不管理“/0”的功能。不是实际大小,而是填充容器的字符串大小 现在我知道我可以重新实现所有这些,将来有时间的时候我可能会这样做,但是现在有没有其他方法来实现这一点呢?我假设您希望保留小字符串,

我需要一个固定大小的字符串类型的某些要求。现在,我一直在做一个简单的
char[20]
字符数组来满足这个要求。但是,它缺少我时不时需要的某些stl容器友好属性。例如,对于一个简单的
empty()
clear()
方法是非常经常需要的,还需要
length
/
size
属性或
getSize()
方法,它们可能返回此属性或不管理“/0”的功能。不是实际大小,而是填充容器的字符串大小


现在我知道我可以重新实现所有这些,将来有时间的时候我可能会这样做,但是现在有没有其他方法来实现这一点呢?

我假设您希望保留小字符串,避免在访问它时在堆上分配和间接寻址。在这种情况下,请看一下Boost

typedef boost::container::small_vector<char> small_string;
typedef boost::container::small_vector small_string;
这将作为您想要的字符串工作


更新:标准C++库的许多实现似乎使用了小代码优化(SSO)来处理<代码> STD::String < /C>。这意味着,只要字符串足够小(例如64位体系结构上的22个字符),它就会被存储在适当的位置。我强烈建议您使用标准的

std::string

因为问题特别要求使用固定大小的字符串,所以当前的答案(
small_vector
)是错误的,因为它没有固定大小


最接近的匹配项是@SamVarshavchik在注释中提到的。

您刚才描述了一个
std::string
@SamVarshavchik,但它不是固定大小的。例如
std::vector
vs
std::array
如果想要使用“clear()”之类的方法,则不能使用“固定大小”,这会更改字符串的大小。下定决心:或者你想要一个固定大小的
std::array
,例如,在这种情况下,你有一个固定大小的数组-no clear(),empty(),等等或者您想要一个可变长度的字符串,也称为std::string@SamVarshavchik,在固定大小字符串的上下文中,clear表示填充null。那么,使用
std::array
。使用
fill()
将其清除为空。在哪里可以阅读有关SSO的更多信息?我的字符串可能最多8-10个字符,但可能必须同时支持32位和64位系统。找到它-您可以将其与您的答案链接: