C+中干净高效的字符串连接+; 我想加入C++中的数千个字符串。我无法从之前知道可能输出字符串的大小。目前,我使用“+”运算符连接字符串

C+中干净高效的字符串连接+; 我想加入C++中的数千个字符串。我无法从之前知道可能输出字符串的大小。目前,我使用“+”运算符连接字符串,c++,arrays,string,performance,C++,Arrays,String,Performance,不幸的是,这个过程在我的程序中花费了很多时间 在Java中,我会使用StringJoiner,这要快得多。C++中有什么类似的东西吗?< /P> 我在网上读过类似的东西,我也读过,但它已经很老了(9岁了),我想从那以后情况已经发生了变化。你可以使用sstringstream(std::sstringstream) . 请参阅上关于它的文档 您也可以使用boost来压缩字符串,或者使用boost::algorithm::join将列表转换为字符串,但这将是过分的,这取决于您的projet请考虑使用

不幸的是,这个过程在我的程序中花费了很多时间

在Java中,我会使用StringJoiner,这要快得多。C++中有什么类似的东西吗?< /P>
我在网上读过类似的东西,我也读过,但它已经很老了(9岁了),我想从那以后情况已经发生了变化。

你可以使用sstringstream
std::sstringstream
) . 请参阅上关于它的文档

您也可以使用boost来压缩字符串,或者使用
boost::algorithm::join
将列表转换为字符串,但这将是过分的,这取决于您的projet

请考虑使用头文件
中定义的sstream


通过使用
操作符添加数据,您可以编写自己的迭代器生成多个字符串,并使用它初始化新字符串。如果迭代器是随机访问,
std::string
的构造函数应该能够使用
std::distance
只预分配内存一次,然后使用迭代器只复制每个
char
一次。“目前我使用“+”运算符加入字符串。”我担心这是不够的信息。很可能您只是做错了什么。使用vector with std::back_inserter取决于您以后如何处理字符串,可能更合适?如果您可以要求服务器在发送之前提供有关字符串的更多信息,那就更好了。但我怀疑网络传输在大多数情况下都比级联快。根本问题是,无论容器是什么,每次级联都需要重新分配内存。我想你是说std::stringstream?这是我通常会使用的,尽管按照另一个答案中的建议查看std::ostringstream,如果您不需要它也像istream一样运行,那么这可能是一个更好的选择(std::stringstream继承自ostream和istream)。
*stringstream
s的FWIW速度非常慢。“方便但可怕。”Veedrac一如既往的回答是“视情况而定”。基准测试:它取决于字符串的长度、字符串的数量以及使用的机器、库。始终使用基准测试。这是一个相当误导的基准测试,因为您不仅隐藏了开销,而且没有显示出它比保留内存的简单变体慢5倍。“总是基准测试”是写慢代码的糟糕借口。@Veedrac我隐藏了多少开销?基准库将报告for(…)循环中代码的计时。