std::string不是C字符串
对于std::string s;来说
访问s[i]的时候,要保证 0<=i<s.size();
对于上面的str2来说,size是0。
应该使用
str2.append(str1[i]); 或者 str2 += str1[i];
1:string的内存是动态分配,但不是完全自动分配,不要这样操作str2[j++]=str1[i]; str2[j]='\0';访问很容易越界出现错误。
2:尽量不要采用后缀++的方式,使用前置++效率高一些
谢谢!
动态分配为什么就不能str2[j++]=str1[i]; str2[j]='\0';这么操作了呢? 难道C++中的字符名不是一个数组?或者其内存空间不连续?
2.我看的C语言的书全采用后缀++, C++的书采用前缀++,一直不知其解,烦劳指教下其中的区别~ 谢谢!
@爱的谜语: C++中的string是一个类,不是数组,因为重载了[]操作符,所以可以使用类似数组的方式(下标)访问元素。
2.后缀++和前缀++在一般情况下对操作数的值没有什么差别,只是一个是先使用后+1,一个是先+1后使用。对于效率问题,无非一个没有值的拷贝,一个有值的拷贝,效率上的差别很细微。
@Simbon: 还是做做大量的测试再说吧。
@爱的谜语: 后缀++要产生临时变量,大量循环操作的时候,你可以想象一下会怎样。编译器可以做一些优化,但是只是对于简单的情况,对于复杂的迭代器交给编译器去处理这些事情是不明智的。
cout<<str2[0]<<endl;先想明白这句代码为何会越界。