Effective STL: 尽量使用区间成员函数代替它们的单元素兄弟
来源:互联网 发布:微信网络设置在哪里 编辑:程序博客网 时间:2024/05/18 04:00
尽量使用区间成员函数代替它们的单元素兄弟的理由
- 一般来说使用区间成员函数可以输入更少的代码。
- 区间成员函数会导致代码更清晰更直接了当。
- 当处理标准序列容器时,应用单元素成员函数比完成同样目的的区间成员函数需要更多地内存分配,更频繁地拷贝对象,而且/或者造成多余操作。
// 把一个int数组拷贝到vector前端int data[numValues]; // 假设numValues在其他地方定义vector<int> v;...// 区间成员函数版本v.insert(v.begin(), data, data + numValues); // 把data中的int插入v前部// 单元素循环版本vector<int>::iterator insertLoc(v.begin());for (int i = 0; i < numValues; ++i){ insertLoc = v.insert(insertLoc, data[i]); ++insertLoc;}
单元素循环版本缺点(此处针对vector)
- 更多的函数调用(每次循环都有一次insert调用)
- 更多次的插入位置后的元素移动(每次循环都要移动后面的元素各一次)
- 可能导致多次内存重新分配(每次分配后会涉及到对象的拷贝,构造,析构等)
- 要小心翼翼地维护insertLoc的值,用于下次循环
支持区间的成员函数总结:
区间构造。所有标准容器都提供这种形式的构造函数:
container::container(InputIterator begin, // 区间的起点 InputIterator end); // 区间的终点
区间插入。
- 所有标准序列容器都提供这种形式的insert:
void container::insert(iterator position, // 区间插入的位置 InputIterator begin, // 插入区间的起点 InputIterator end); // 插入区间的终点
- 关联容器使用它们的比较函数来决定元素要放在哪里,所以它们了省略position参数。
void container::insert(lnputIterator begin, InputIterator end);
- 所有标准序列容器都提供这种形式的insert:
区间删除。
每个标准容器都提供了一个区间形式的erase,但是序列和关联容器的返回类型不同。序列容器提供了这个:
iterator container::erase(iterator begin, iterator end);
关联容器提供这个:
void container::erase(iterator begin, iterator end);
区间赋值。所有标准列容器都提供了区间形式的assign:
void container::assign(InputIterator begin, InputIterator end);
0 0
- Effective STL: 尽量使用区间成员函数代替它们的单元素兄弟
- Effective STL: 尽量使用区间成员函数代替它们的单元素兄弟
- 条款5:尽量使用区间成员函数代替它们的单元素兄弟
- 尽量使用区间成员函数代替它们的单元素兄弟
- 尽量使用区间成员函数代替它们的单元素兄弟
- Effective STL-尽量使用区间操作代替单元素操作
- STL高效编程( 五)-尽量使用区间操作函数来代替单元素操作函数。
- 复习 Effective STL 第五条 区间成员函数优先于与之对应的单元素成员
- 《Effective STL》读书笔记三:Item 5(区间成员函数优先于与之对应的单元素成员函数)
- Effective STL 第5条:区间成员函数优先于与之对应的单元素成员函数
- STL区间成员函数优先于与之对应的单元素成员函数
- Effective STL 05 区间成员函数
- effective STL - 尽量使用vector和string来代替动态分配的数组(char *)
- Effective STL 13 尽量使用vector和string来代替动态分配的数组
- 尽量用成员函数代替同名的算法
- 区间成员函数优先于与之对应的单元素成员函数
- 区间成员函数优先于与之对应的单元素成员函数
- 条款5:区间成员函数优先于与之对应的单元素成员函数
- 动态规划中的矩阵链乘法的介绍与理解(包含c源代码)
- Win7安vc2008编译报LINK : fatal error LNK1000: Internal error during IncrBuildImage .
- 数据库读写的一些心得
- 美团一二三面经历
- poj-1693
- Effective STL: 尽量使用区间成员函数代替它们的单元素兄弟
- Combination Sum
- MATLAB——histeq函数
- 比较字母大小
- C++的强制类型转换
- GridView中通过CommandArgument传递多个参数的例子
- 关于Web.Config中<customErrors>的mode属性问题
- HashMap,HashTable,HashSet,ConcurrentHashMap的分析比较
- Python os.path