关于string的奇怪错误,求指导
我在VS2012下写的代码:
怎么回事呢?
[解决办法]
string动态增加大小,并不是在原空间之后接续新空间,而是以原大小的两倍另外配置一块较大空间,然后将原有内容拷贝过来,然后才开始在原有内容之后构造新元素,并释放空间。因此,对 string的任何操作,一旦引起空间重新配置,指向原 string的所有迭代器就都失效了。
但不同编译器以及所带STL行为不一定完全一致,如我在linux使用你的代码i到1,就错误了
[解决办法]
qtCreator测试,i到2就崩了
VS2010测试,i到16崩了
查看内存地址发现string到16的时候地址就变了,原因如楼上所述,至于2还是16这个数字应该取决于编译器实现
解决方法是a.insert(it,c)这句改成it=a.insert(it,c)
你可以试试
[解决办法]
直接这样就行了。
a.push_back(c);
[解决办法]
a.insert(it,c);
it++; //这时it已经失效了。改为it=a.end();
[解决办法]
++