如何在连续内存中存储相同长度的字符串(字符串数可能会有所不同,但每个字符串的长度相同)? 有可能吗?
答案 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*)
本身不一定会与它控制的文本一起连续分配,就像指向动态分配的缓冲区的情况一样。