c++ string类insert的问题

在VC6.0中调用/结果分别如下:str.insert(0,'a');//成功在最前面插入astr.insert(str.begin(),1,'a');//成功str.i... 在VC6.0中调用/结果分别如下:
str.insert(0,'a'); //成功在最前面插入a
str.insert(str.begin(),1,'a'); //成功
str.insert(str.begin(),'a'); //成功
而到了VS2010中我再编译运行结果如下:
str.insert(0,'a'); //编译错误,提示无法从“char”转换为“const std::basic_string<_Elem,_Traits,_Ax>”
//貌似说是函数参数重载列表出错
str.insert(str.begin(),'a'); //编译通过,但执行时出错,看原因貌似是指针向前移位时超出范围崩溃
str.insert(str.begin(),1,'a'); //结果同上
str.insert(0,"a"); //编译通过,运行正常,插入字符a

综上:为什么VS中字符串的迭代器不允许超出范围呢?连我的使用迭代器来作为条件的for循环也一起崩溃了
还有就是str.insert(0,1,'a');在两个环境中均可正常运行,反正带指针和迭代器的在VS中都没有正常工作。
展开
 我来答
穷比组丶鞶mj
推荐于2016-01-21 · 超过66用户采纳过TA的回答
知道答主
回答量:115
采纳率:0%
帮助的人:66.2万
展开全部
s.insert(0,s2,0,s2.size()); 从s的第0个字符开始插入s2的从第0个字符开始的copy s2.size()个字符到s字符串。所以这个程序的输出是:some other stringsome string
看下面的说明你就明白这二个0分别代表什么意思了。就像你问楼上的(还是不清楚 两个0代表什么 s2.size()要是换成数字呢 比如1,2,3,4,5?) 你自己测试测试这个程序就清楚了。把s和s2字符串改成完全不同的字符串,然后分别改动二个0 就可以验证了。

string的 insert方法说明:
string& insert ( size_t pos1, const string& str, size_t pos2, size_t n );
Inserts a copy of a substring of str at character position pos1. The substring is the portion of str that begins at the character position pos2 and takes up to n characters (it takes less than n if the end of str is reached before).
追问
我知道有很多种重载函数版本,我也会用,我只想弄明白为甚么VS和VC中不同,而且有几种根本用不了了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式