string的分配策略?

EffectiveCpp 2004-11-21 12:25:33
string是如何分配的?就像vector的策略那样.
我想知道什么情况下指向string的迭代器失效.
...全文
154 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
EffectiveCpp 2004-11-24
  • 打赏
  • 举报
回复
to Jinhao(辣子鸡丁):
似乎不是这样, 看下面一例:

int main()
{

string a("hello");
string b(a);
string::iterator iter=b.begin();
cout << *iter << endl;
*iter = 'b'; //COW
cout << *iter << endl; //为何iter会自动变动指到新位置?不失效?
cout << a << endl;
cin.get();
}
Jinhao 2004-11-24
  • 打赏
  • 举报
回复
string::iterator iter=b.begin();
//因为在这里,b在这里就重新分配了内存空间来存放自己的字符串!因为basic_string的iterator是random access iterator,这是可写的,得到一个迭带器,就意味可能通过这个iterator将改变其中的元素。所以COW是在这里进行!
EffectiveCpp 2004-11-23
  • 打赏
  • 举报
回复
怪不得我的迭代器在replace之后就异常.
Jinhao 2004-11-22
  • 打赏
  • 举报
回复
和vector一样,还有个特点就是COW
whoho 2004-11-22
  • 打赏
  • 举报
回复
还没注意过这点,也没有分析过源码。
我觉得保险起见,在造成string增长(变短似乎可以不考虑)之后,
最好不要使用迭代器。
EffectiveCpp 2004-11-21
  • 打赏
  • 举报
回复
为什么没人回答?

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧