在相邻的内存中存储相同长度的字符串?

时间:2015-09-10 04:55:52

标签: c++ c++11

如何在连续内存中存储相同长度的字符串(字符串数可能会有所不同,但每个字符串的长度相同)? 有可能吗?

3 个答案:

答案 0 :(得分:7)

最简单的方法可能是,不要使用std::string,使用std::array<char, N>作为字符串(其中N是常用长度,并且可能会将char替换为{ {1}}如有必要),然后将其放入wchar

std::vector

如果在编译时不知道长度typedef std::array<char, N> string_type; typedef std::vector<string_type> contiguous_strings; (或者如果不知道上限),那么你将不得不做一些更复杂的事情。我猜你想要使用升压扁平容器。

答案 1 :(得分:0)

使用数组向量。如果你知道每个字符串的长度。

答案 2 :(得分:0)

这个问题给想象留下了很多。不是说这是一个很好的通用解决方案,但是为了列出另一个替代方案 - 使用包含文本字符串的连接的单个std::string()可能是可行的。您可以存储ASCII NUL字符,因此(my_string.data() + N * i),其中N是包含NUL的共享长度,为第(i + 1)个包含的字符串提供const char*:您可以使用{{1}调用为ASCIIZ C风格字符串编写的函数,如果需要独立对象,则包括const char*构造函数。当然,std::string(const char*)本身不一定会与它控制的文本一起连续分配,就像指向动态分配的缓冲区的情况一样。