在c ++ 98中,std :: string(c++11 required it is contiguous)的内存可能不是连续的存储,boost :: container :: string怎么样?它是否保证内存是连续的?
如果它是连续的,它可以更自然地与遗留API一起使用。
boost::container::string str("some data\0");
old_api(&str[0]);
不需要再将其复制到矢量
boost::container::string str("some data\0");
std::vector<char> buffer(str.begin(), str.end());
old_api(&str[0]);
谢谢
答案 0 :(得分:3)
是的,boost::containter::string
内存是连续的。
除非你使用一些非普通reference
,const_refeference
和pointer
类型的时髦分配器,否则任何boost::container::basic_string
特化都会有连续的内存。
查看字符串的data()
方法:它保证(无条件)常量时间,{data()+i == &operator[](i)
i
中每个0
size()
{{1}} }]。