shenxiuwen 2020-08-01
1.unique
unique函数的函数原型如下:
只有两个参数,且参数类型都是迭代器:
1 | iterator unique(iterator it_1,iterator it_2); |
这种类型的unique函数是我们最常用的形式。其中这两个参数表示对容器中[it_1,it_2)范围的元素进行去重(注:区间是前闭后开,即不包含it_2所指的元素),返回值是一个迭代器,它指向的是去重后容器中不重复序列的最后一个元素的下一个元素。
2.C++ merge和inplace_merge(STL merge和inplace_merge
merge() 算法会合并两个序列并将结果保存到第三个序列中,它使用 < 运算符来比较元素。图 1 表明合并操作被运用到 these 和 those 容器的内容上,结果序列保存在 both 容器中。
merge() 算法需要 5 个参数。其中前两个指定第一个输入序列的迭代器,在这个示例中是 these,后面两个迭代器指定第二个输入序列,在这个示例中是 those,最后一个参数是一个指定合并元素存放位置的迭代器,即 both 容器。用来指定输入序列的迭代器只需要是最低层次的迭代器,用来保存合并结果的迭代器需要是一个输出迭代器。
merge() 算法并没有关于被合并序列容器的信息,所以它们不能创建元素,只能用提供的作为第 5 个参数的迭代器来保存元素。因而在这个示例中,目的序列中的元素必须是已经存在的。在图 1 中,通过以两个输入容器元素个数之和为指定的元素个数创建一个 both 容器来保证此要求。创建的结果序列可以放在任何位置,甚至可以放在一个源序列容器中,但源序列和目的序列不能重叠;如果它们重叠了,结果是未定义的,但可以肯定的是效果肯定不好。当然,可以用一个插入迭代器来指定目的位置,元素会被自动创建。
merge() 算法返回的迭代器指向合并序列末尾的后一个位置,所以可以通过这个函数调用使用的第 5 个参数加上这个函数返回的迭代器来确定合并序列的范围。
inplace_merge() 算法可以合并同一个序列中两个连续有序的元素序列。它有三个参数: first、second、last 和 last 是一个双向迭代器。这个序列中的第一个输入序列是 [first,second), 第二个输入序列是 [second,last),因而 second 指向的元素在第二个输入序列中。结果为 [first, last)。图 2 展示了这个操作。