首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于string的奇怪异常,求指导

2013-08-01 
关于string的奇怪错误,求指导我在VS2012下写的代码:怎么回事呢?[解决办法]string动态增加大小,并不是在原

关于string的奇怪错误,求指导
我在VS2012下写的代码:



怎么回事呢?关于string的奇怪异常,求指导
[解决办法]
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();
[解决办法]
引用:
a.insert(it,c);
        it++; //这时it已经失效了。改为it=a.end();

++

热点排行