s+=t会重新生成一个s,效率不是很高
s.append会重新生成吗?
如果会,用什么方法才不会?
10 个解决方案
#1
楼上一定要把编译环境说清楚
对于C++,string使用容器的方式实现,以上两种方法都可能因为s.size()+t.size() > s.capacity()而从新申请适当的内存给s
对于C++,string使用容器的方式实现,以上两种方法都可能因为s.size()+t.size() > s.capacity()而从新申请适当的内存给s
#2
未出异常情况下,结果一样
#3
容量不够,都只能通过重新申请
#4
差不多,但append还有别的重载版本,而operator+=右边只能跟一个参数。
#5
一样的。
#6
你的程序有效率问题?
#7
C++中的string实现方式跟C#一样吗?
C#中string是不可变的,赋值总是会生成一个新的事例,只有用stringbuild才不会,C++的string相当于C#的stringbuild?
C#中string是不可变的,赋值总是会生成一个新的事例,只有用stringbuild才不会,C++的string相当于C#的stringbuild?
#8
我需要向string中写很多东西(可能达到1M---20M)
#9
>> s+=t会重新生成一个s,效率不是很高
谁说的?
谁说的?
#10
我需要向string中写很多东西(可能达到1M---20M)
~~~~~~~
那就先reserve(xxx)
s=s+t损失效率,要生成临时对象,并且调用拷贝构造函数。
operator+= 里面就是调用append,可以看vc stl源码。
~~~~~~~
那就先reserve(xxx)
s=s+t损失效率,要生成临时对象,并且调用拷贝构造函数。
operator+= 里面就是调用append,可以看vc stl源码。
#1
楼上一定要把编译环境说清楚
对于C++,string使用容器的方式实现,以上两种方法都可能因为s.size()+t.size() > s.capacity()而从新申请适当的内存给s
对于C++,string使用容器的方式实现,以上两种方法都可能因为s.size()+t.size() > s.capacity()而从新申请适当的内存给s
#2
未出异常情况下,结果一样
#3
容量不够,都只能通过重新申请
#4
差不多,但append还有别的重载版本,而operator+=右边只能跟一个参数。
#5
一样的。
#6
你的程序有效率问题?
#7
C++中的string实现方式跟C#一样吗?
C#中string是不可变的,赋值总是会生成一个新的事例,只有用stringbuild才不会,C++的string相当于C#的stringbuild?
C#中string是不可变的,赋值总是会生成一个新的事例,只有用stringbuild才不会,C++的string相当于C#的stringbuild?
#8
我需要向string中写很多东西(可能达到1M---20M)
#9
>> s+=t会重新生成一个s,效率不是很高
谁说的?
谁说的?
#10
我需要向string中写很多东西(可能达到1M---20M)
~~~~~~~
那就先reserve(xxx)
s=s+t损失效率,要生成临时对象,并且调用拷贝构造函数。
operator+= 里面就是调用append,可以看vc stl源码。
~~~~~~~
那就先reserve(xxx)
s=s+t损失效率,要生成临时对象,并且调用拷贝构造函数。
operator+= 里面就是调用append,可以看vc stl源码。