作者:絮尘飘雪_896 | 来源:互联网 | 2023-02-01 22:18
我是C++字符串的新手.有没有办法一次连接两个以上的字符串?或者我当时要连两个字符串?我担心的是它可能需要在每个操作上分配内存,而不是仅为最终结果分配一次.
记住java中的类似内容,想知道std中是否存在某种方法.实际上,std :: stringstream可能是它,但我不知道它究竟是如何工作的.
1> Vittorio Rom..:
您可以reserve
事先获得所需的空间,避免重新分配.
std::string s0{/*...*/}, s1{/*...*/}, s2{/*...*/};
std::string sink;
sink.reserve(s0.size() + s1.size() + s2.size() + 1);
sink += s0;
sink += s1;
sink += s2;
您可以使用可变参数string_cat
函数使其更好.这是一个C++ 17实现:
template
std::string string_cat(Strings&&... strings)
{
std::string result;
result.reserve((strings.size() + ...) + 1);
((result += std::forward(strings)), ...);
return result;
}
用法:
using namespace std::literals;
auto res = string_cat("a"s, "b"s, "c"s);
wandbox上的实例
2> ΦXocę 웃 Пepe..:
是的,为了避免昂贵的内存浪费使用 stringstream
std :: stringstream可能是它,但我不知道它究竟是如何工作的.
这是它的工作原理:包含sstream,创建一个对象,使用stream运算符追加到它所需的内容<<将结果作为字符串调用函数str
例:
#include
std::stringstream mySS;
mySS <<"Hello" <<" World!" <<"end!!" <<" Foo";
当你完成了
std::string stringResult = mySS.str();