由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - stl 源代码疑问
相关主题
说c++不难的欢迎来看看这个good C++ open source project?
stl container erase in a loop这段code有啥问题?
c++ pointers are iterators, why?包含指针的类和vector的问题
A C++ STL questionC#复制栈是反序的?
C++ vector 一边遍历一边删node express.js如何package
关于insertersgi stl 源代码一问
deque的pointer和reference是怎么回事?one more c++ question
C++: What is the difference between the two approaches?Java代码,老是compile出错,大家帮我看看哪错了。。。
相关话题的讨论汇总
话题: __话题: node话题: tmp话题: position话题: iterator
进入Programming版参与讨论
1 (共1页)
c*****z
发帖数: 182
1
在list中有两个操作insert和erase,它们都是返回一个iterator的类型,可是在代码
中返回的方式不同,如下:
在insert中:
iterator insert(iterator __position, const _Tp& __x) {
_Node* __tmp = _M_create_node(__x);
__tmp->_M_next = __position._M_node;
__tmp->_M_prev = __position._M_node->_M_prev;
__position._M_node->_M_prev->_M_next = __tmp;
__position._M_node->_M_prev = __tmp;
return __tmp;
}
在erase中:
iterator erase(iterator __position) {
_List_node_base* __next_node = __position._M_node->_M_next;
_List_nod
N**s
发帖数: 837
2
in insert, _M_create_node is like a factory, ctor called in _Construct
in erase, it's constructed from base_node using ctor

【在 c*****z 的大作中提到】
: 在list中有两个操作insert和erase,它们都是返回一个iterator的类型,可是在代码
: 中返回的方式不同,如下:
: 在insert中:
: iterator insert(iterator __position, const _Tp& __x) {
: _Node* __tmp = _M_create_node(__x);
: __tmp->_M_next = __position._M_node;
: __tmp->_M_prev = __position._M_node->_M_prev;
: __position._M_node->_M_prev->_M_next = __tmp;
: __position._M_node->_M_prev = __tmp;
: return __tmp;

c*****z
发帖数: 182
3
不太明白什么意思,能否再仔细讲解一下
我知道insert里用的是displacement new, 而erase里只是指针操作,没有创建新的节点
我的问题是,他们返回iterator的时候,一个隐式调用构造函数,一个显式,这个和
node指针本身构造方式有关吗?

【在 N**s 的大作中提到】
: in insert, _M_create_node is like a factory, ctor called in _Construct
: in erase, it's constructed from base_node using ctor

X****r
发帖数: 3557
4
I don't think there is any real difference between the two. It seems that
the explicit construction for the latter just improves readability because
of the cast before it.

节点

【在 c*****z 的大作中提到】
: 不太明白什么意思,能否再仔细讲解一下
: 我知道insert里用的是displacement new, 而erase里只是指针操作,没有创建新的节点
: 我的问题是,他们返回iterator的时候,一个隐式调用构造函数,一个显式,这个和
: node指针本身构造方式有关吗?

p****o
发帖数: 1340
5
no much deep thought here. if you are the author of this code, you
will almost sure do the same thing.

【在 c*****z 的大作中提到】
: 在list中有两个操作insert和erase,它们都是返回一个iterator的类型,可是在代码
: 中返回的方式不同,如下:
: 在insert中:
: iterator insert(iterator __position, const _Tp& __x) {
: _Node* __tmp = _M_create_node(__x);
: __tmp->_M_next = __position._M_node;
: __tmp->_M_prev = __position._M_node->_M_prev;
: __position._M_node->_M_prev->_M_next = __tmp;
: __position._M_node->_M_prev = __tmp;
: return __tmp;

1 (共1页)
进入Programming版参与讨论
相关主题
Java代码,老是compile出错,大家帮我看看哪错了。。。C++ vector 一边遍历一边删
如何从vim里直接编译源代码 (转载)关于inserter
linked list vs Binary treedeque的pointer和reference是怎么回事?
请推荐最好的C++/Java/Python开源代码C++: What is the difference between the two approaches?
说c++不难的欢迎来看看这个good C++ open source project?
stl container erase in a loop这段code有啥问题?
c++ pointers are iterators, why?包含指针的类和vector的问题
A C++ STL questionC#复制栈是反序的?
相关话题的讨论汇总
话题: __话题: node话题: tmp话题: position话题: iterator