C++字符串连接速度有关问题

C++字符串连接速度问题
Cstring   str1;
for(int   i   =   1;i!=10000;++i)
{
        str1   +=   "set   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ";
}
执行速度非常慢,我知道在JAVA或者VB中可以先把值附给数组,然后再用数组的join这样连接字符串会快很多,不知道C++中应该怎么做,请教各位高手


------解决方案--------------------
i!=10000 ?
是i <10000

想提高速度,需要提前申请足够的内存,否则 += 时会重新申请内存,再copy
------解决方案--------------------
看《Imperfect C++》,上面有快速拼接的解决方案
------解决方案--------------------
i!=10000;//可以
预先给于大缓存
否则在appending 过程中不断使得缓存变大,同时使用非常耗时间的拷贝
俄~~
------解决方案--------------------
C++标准是允许以更高的效率处理这样的字符串累加的。因为标准没有要求std::basic_string <> 中包含的字符串以连续的方式布置。实际上这完全是为了提高效率。
因此,我们可以在标准的框架下,实现一个高性能累加的标准字符串。比如其内部的字符串存储,可以是通过一个数组或链表,每个数组单元或链表节点指向实际存放子字符串的内存。每次累加一个串,就是在数组或链表中加上一项,并分配一块内存,复制相应的字串。
这种两级构造,便可以使字符串的累加变成O(n)复杂度的操作。效率可以大幅提高。
现在的std::basic_string <> 实现基本上没有采用这种方法的。因为这种结构提高了字符串累加的性能,但却使得索引或下标操作不再是O(1)复杂度的了。有利有弊。而标准字符串大多数情况下不会参与如此频繁的累加操作。即使遇到,也可以通过特别的算法进行处理。所以这种实现的价值不大,但副作用不小。
对于特殊要求,某些标准库实现提供了一些扩展的字符串,如SGI的STL库提供的rope(绳索,要比string粗),通过更加复杂的树形结构组织字符串,以满足一些特殊的需求。