尽量使用区间成员函数来代替单元素兄弟的三个可靠的论点:
1、区间成员函数更容易写,
2、它们更清楚地表达你的意图,
3、而且它们提供了更高的性能。
快!给定两个vector,v1和v2,使v1的内容和v2的后半部分一样的最简单方式是什么?不要为“当v2有偶数个元素时才有一半”而烦恼,只要做一些合理的东西。
时间到!如果你的答案是
v1.assign(v2.begin() + v2.size() / 2, v2.end());
或者其他很相似的东西,你就答对了,可以获得金质奖章
区间函数:
在下面的,参数类型iterator意思是容器的迭代器类型,也就是container::iterator。另一方面,参数类型InputIterator意思是可以接受任何输入迭代器。
1、区间构造。所有标准容器都提供这种形式的构造函数:
container::container(InputIterator begin, // 区间的起点
InputIterator end); // 区间的终点
2、 区间插入。所有标准序列容器都提供这种形式的insert:
void container::insert(iterator position, // 区间插入的位置
InputIterator begin, // 插入区间的起点
InputIterator end); // 插入区间的终点
关联容器使用它们的比较函数来决定元素要放在哪里,所以它们了省略position参数。
void container::insert(lnputIterator begin, InputIterator end);
3、 区间删除。每个标准容器都提供了一个区间形式的erase,但是序列和关联容器的返回类型不同。
序列容器提供了这个:
iterator container::erase(iterator begin, iterator end);
而关联容器提供这个:
void container::erase(iterator begin, iterator end);
4、区间赋值。就像我在这个条款的一开始提到的,
所有标准列容器都提供了区间形式的assign:
void container::assign(InputIterator begin, InputIterator end);