2012-12-11 13 views
4

我读的这个功能应该工作的方式不同的解释。修饰符Modifiers :: splice_after(常量性POS,修饰符Modifiers及其他,我为const_iterator)功能

cplusplus.com说,这个功能应该“直接移动元素后,我”。
然而cppreference.com说它拼接元素AT我。
MSvisual studio同意cplusplus.com。然而,实际上正确的行为是什么?我倾向于认为移动“在i之后”更合乎逻辑(&不需要N次找到前面的节点)。

(PS:无前向列表标签?)

+1

我已经解决了cppreference.com页面。 – ecatmur

回答

4

23.3.4.6

void splice_after(const_iterator position, forward_list& x, const_iterator i); 
void splice_after(const_iterator position, forward_list&& x, const_iterator i); 

效果:将以下​​我到*这个元件,以下的位置,并从X中删除。如果位置== i或位置== ++ i, 结果不变。针对* ​​i的指针和引用继续到 指向相同的元素,但是作为* this的成员。迭代器* i(包括i本身)继续到 引用相同的元素,但现在表现为迭代器进入* this,而不是x。

+2

在这种情况下标准是有缺陷的; '* i'应该读上面的'* ++ i',并且*(包括'i'本身)*应该被移除。 – ecatmur

+2

我已经提交了DR草案isocpp.org讨论组:https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/vE---WC2SuI%5B1- 25%5D – ecatmur