在effective STL中,作者建议我们尽量使用区间成员函数代替他的单元素的兄弟函数。使用区间成员函数主要有以下几方面的优点:
(1)使用区间成员函数能够使你的代码所要表达的意思更清晰,而是用单元素函数将必须引入循环,可能对于程序的维护会造成更多的困难。
(2)使用区间成员函数将可以大量减少数据的移动次数。例如如果在vector前面查出元素,那么使用单元素函数每插入一个元素就需要移动目前vector中所有的元素。但是如果使用区间成员函数inserter,在插入元素时,将会一次性的计算出每一个元素的最终位置,这样只会移动一次,大大的提高了效率。
(3)使用区间成员函数将有可能会减少申请内存的次数。想vector这样的容器,会根据元素的多少重新分配内存空间大小,如果每次使用单元素函数,可能会随着插入元素的个数增加多次申请内存。但是使用区间函数,将会一次性的申请内存。
在以下情形下,应该尽量使用区间函数:
(1)对容器的赋值操作
container::container( InputIterator begin,InputIterator end);
(2)序列容器的插入操作
void container::insert(iterator position, // where to insert the range
InputIterator begin, // start of range to insert
InputIterator end); // end of range to insert
(3)关联容器的插入操作
void container::insert(lnputIterator begin, InputIterator end);
(4)容器的擦除操作
iterator container::erase(iterator begin, iterator end);
void container::erase(iterator begin, iterator end);
(5)容器的区间赋值
void container::assign(lnputIterator begin, InputIterator end);
凡是可以使用区间函数的地方尽量使用区间函数,区间函数不能保证效率一定比单元素函数好,但是一定不会比单元数效率低。