STL 列表的参数::插入

Parameters to STL list::insert

本文关键字:插入 参数 列表 STL      更新时间:2023-10-16

STL list::insert 的语法如下 -

  iterator
  insert(iterator __position, const value_type& __x);

为什么要传递迭代而不是对迭代器的引用

允许实现通过 const 引用而不是按值传递迭代器。没有相关的语义差异。

在这种情况下,按值传递效率略高。iterator对象包含指向堆上列表元素对象的单个指针。请记住,通过引用传递本质上是通过幕后的指针传递。(尽管引用与指针不同,但在跨越实际函数调用边界时,没有其他可行的实现。

因此,按值传递意味着

传递到堆的指针,但按引用传递意味着传递指向iterator的指针,然后在 insert 函数内部需要两个间接寻址。(这在理论上确实取决于 ABI,但无论如何,按值传递不会有缺点。

传递语义的快速说明:

template< typename param >
void same_params( param a, param b ) {
    std::cout << ( &a == &b ) << 'n';
}
int main() {
    int const five = 5;
    same_params< int const & >( five, five ); // true
    same_params< int const & >( five, 6 ); // false
    same_params< int const & >( five, 5 ); // unspecified
    same_params< int const & >( 5, 5 ); // unspecified
    same_params< int >( five, five ); // false (for any arguments)
}

http://ideone.com/2mC07

如果不是传递指针,same_params< int const & >就没有办法工作。