2011-06-08 186 views
3

末下面两行做同样的事情在Visual Studio 2005:字符串::在插入串

myString.insert(myString.size(),1,myNewChar); 

myString.append(1,myNewChar); 

是第一位的应该抛出out_of_range异常或这是正确的行为?

回答

5

这是正确的行为 - 您传递的索引是位置后面插入新角色的位置的索引,而不是之前。事实上,C++ 03标准特别说(§21.3.5.4/ 2):

需要pos1 <= size()pos2 <= str.size()

(其中pos1是在你传递索引和pos2 == npos超载你打电话) - 请注意,这是<=而不是<

+0

当对索引感到困惑时,总是考虑一些普通的情况(带有零或带有一个元素的字符串)以及在这种情况下您希望如何插入。 – 2011-06-08 22:23:15