固定大小的字符串类型容器

时间:2016-09-04 12:27:57

标签: c++ string c++11 stl containers

我需要一个固定大小的字符串类型来满足某些要求。现在我一直在做一个简单的char[20]字符数组来满足这个要求。但是,它缺乏某些我需要的容器友好属性。例如,需要非常频繁的empty()clear()方法以及可能返回此属性或能力的length / size属性或getSize()方法不管理' / 0'。不是实际尺寸,而是填充容器的字符串大小。

现在我知道我可以重新实现所有这些,将来我可能会有一些时间,但是现在有另一种方法来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

我假设您希望将小字符串保留在原位,避免在访问它时在堆和间接上进行分配。在这种情况下,请查看Boost中的small_vector

typedef boost::container::small_vector<char> small_string;

这可以作为你想要的字符串。

更新:似乎标准C ++库的许多实现都使用std::string的小字符串优化(SSO)。这意味着只要您的字符串足够小(例如64位架构上的22个字符),它就会存储在原位。我强烈建议您使用标准std::string

答案 1 :(得分:1)

由于问题专门要求使用固定大小的字符串,因此当前答案(small_vector)不正确,因为它没有固定大小。

如@SamVarshavchik在评论中提到的,最接近的匹配是std::array<char, N>