博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Effective_STL 学习笔记(五) 尽量使用区间成员函数代替他们的单元素兄弟
阅读量:6257 次
发布时间:2019-06-22

本文共 1601 字,大约阅读时间需要 5 分钟。

给定两个vector,v1和v2,使v1的内容和v2的后半部分一样的最简单的方式是什么?

  v1.assign( v2.begin() + v2.size()/2, v2.end() );

两点说明:

  1. assign成员函数对于所有标准序列容器(vector、string、deque和list)都有效;

  2. 区间成员函数使用两个迭代器参数来指定元素的一个区间来进行某个操作。避免造成效率损失的循环

 

关于 copy 说明:

几乎所有的目标区间通过插入迭代器(inserter、back_inserter 或 front_inserter)指定的copy的使用,

都可以(应该)通过调用区间成员函数来代替。

  copy( v2.begin() + v2.size() / 2,v2.end(),back_inserter(v1) );    // 用下式替换

  v1.insert( v1.end(), v2.begin() + v2.size() / 2, v2.end() );

建议:几乎所有目标区间被插入迭代器指定的 copy 地使用都可以用调用的区间成员函数来代替。

 

用区间成员函数代替它们的单元素兄弟的理由:

  一般来说使用区间成员函数可以输入更少的代码;

  区间成员函数会导致代码更清晰更直接了当;

  当处理标准序列容器时:效率,单元素操作需要更多的内存分配,更频繁的拷贝对象;

把一个 int 数组拷贝到 vector 的前端

1 int data[ numValues ];2 vector
v;3 v.insert( v.begin(), data, data + numValues );

而循环和copy的做法(只列出copy)

copy(data, data + numValues, inserter(v,v.begin() ) );

成员函数好在三点说明:  

  1. 避免多余的函数调用开销;

  2. 避免多余的位置移动开销;

  3. 避免多余的内存分配处理。 

对于关联容器效率问题几乎没有,但是附加的重复调用单元素 insert 函数的开销问题存在。

即使没有效率的立场,写代码使用区间成员函数需要更少的输入这个事实任然存在。

 

支持区间的成员函数:

区间构造:

  container::container( InputIterator begin, InputIterator end ); // 所有标准序列容器

区间插入:

  void container::insert( iterator position, InputIterator begin, InputIterator end );

  void container::insert( InputIterator begin, InputIterator end );// 关联容器使用它们的比较函数决定插入位置

  单元素插入还包括:

    push_front、push_back以及 copy的参数是 front_inserter 或者 back_inserter

区间删除:

  iterator container::erase( iterator begin, iterator end );    // 序列容器

  void cointainer::erase( iterator begin, iterator end );  // 关联容器

区间赋值:

  void container:;assign( InputIterator begin, InputIterator end );  // 所有标准序列容器

 

转载于:https://www.cnblogs.com/kidycharon/p/10000916.html

你可能感兴趣的文章
Ubuntu 隐藏所有窗口快捷键不生效问题
查看>>
编译Spring源码
查看>>
javascript运算符优先级
查看>>
Spring Cloud 学习 (七) Spring Cloud Sleuth
查看>>
使用docker api
查看>>
Log4j简单配置解析
查看>>
游戏上线... 记录下...
查看>>
js运动 淡入淡出
查看>>
leetcode 75颜色分类
查看>>
程序员求职成功路(3)
查看>>
Winform 打印PDF顺序混乱,获取打印队列
查看>>
django 快速搭建blog
查看>>
datetime.timedelta类
查看>>
SQL Server,MySQL,Oracle三者的区别
查看>>
[K/3Cloud] 在设计时复制已有表单菜单或菜单项快速建立菜单
查看>>
矩阵快速幂总结
查看>>
[spring] Ioc 基础
查看>>
关于DataTables一些小结
查看>>
win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
查看>>
Hibernate的基本配置
查看>>