Chinaunix

标题: 关于stl原代码中一个疑问 [打印本页]

作者: freebarque    时间: 2009-06-13 17:03
标题: 关于stl原代码中一个疑问
抽空想欣赏下stl的代码, 下的sgi stl 3.0版本的, 更高版本的到处都是_, 看了头晕。

stl_vector.h里面有段代码, 挺想不通, T x_copy = x;  为啥要产生一个copy
为啥后面不直接用: *position = x

我又特意翻了stl的最新版, 还是这样的代码, 有啥特殊含义不?

template <class T, class Alloc>
void vector<T, Alloc>::insert_aux(iterator position, const T& x) {
&nbsp;&nbsp;if (finish != end_of_storage) {
&nbsp;&nbsp;&nbsp;&nbsp;construct(finish, *(finish - 1));
&nbsp;&nbsp;&nbsp;&nbsp;++finish;
&nbsp;&nbsp;&nbsp;&nbsp;T x_copy = x;
&nbsp;&nbsp;&nbsp;&nbsp;copy_backward(position, finish - 2, finish - 1);
&nbsp;&nbsp;&nbsp;&nbsp;*position = x_copy;
&nbsp;&nbsp;}
&nbsp;&nbsp;else {
...............................

作者: 雨过白鹭洲    时间: 2009-06-13 18:04
没研究过,我还是拿来就用好了
作者: eveson    时间: 2009-06-14 09:10
一直不清楚写模板、vector、map的这些代码有什么好的debug方法
作者: tyc611    时间: 2009-06-14 10:32
如果x是vector序列中position后的一个元素呢?此时在移动前需要先保存下来,否则x指向的元素就不正确了
作者: zhaohongjian000    时间: 2009-06-14 10:39
原帖由 tyc611 于 2009-6-14 10:32 发表
如果x是vector序列中position后的一个元素呢?此时在移动前需要先保存下来,否则x指向的元素就不正确了


x不是要插入的元素吗?
作者: hellomotor    时间: 2009-06-14 11:20
STL容器好像都是持有副本而不是引用
作者: zliming    时间: 2009-06-14 11:30
原帖由 tyc611 于 2009-6-14 10:32 发表
如果x是vector序列中position后的一个元素呢?此时在移动前需要先保存下来,否则x指向的元素就不正确了


回答又简洁又强大。
如果是引用vector的元素的,在后面的/或要重分配vector内存的,都要先保存一下这个引用
作者: yangsf5    时间: 2009-06-14 11:50
标题: 回复 #6 hellomotor 的帖子

  1. T x_copy = x;
  2. *position = x_copy;
复制代码

  1. *position = x;
复制代码

你的意思难道是第二种使vector的positon位置不是副本而是引用了?
作者: hellomotor    时间: 2009-07-14 15:58
我错了,tyc611是对的
作者: xiaoQ008    时间: 2009-07-14 16:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: emacsnw    时间: 2009-07-14 18:06
直接用x应该无妨。我觉得是有点多余。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2