• ACM小工具


    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算法

    inplace_merge() 算法可以合并同一个序列中两个连续有序的元素序列。它有三个参数: first、second、last 和 last 是一个双向迭代器。这个序列中的第一个输入序列是 [first,second), 第二个输入序列是 [second,last),因而 second 指向的元素在第二个输入序列中。结果为 [first, last)。图 2 展示了这个操作。

    typedef pair<int, int> P;

    typedef pair<P, int> PP;

    P add(P p1,P p2)

    {

        return make_pair(p1.first+p2.first, p1.second+p2.second);

    }

    P sub(P p1,P p2)

    {

        return make_pair(p1.first-p2.first, p1.second-p2.second);

    }

  • 相关阅读:
    第十周进度条
    冲刺阶段第十天
    冲刺阶段第九天
    冲刺阶段第八天
    冲刺阶段第七天
    冲刺阶段第六天
    第一次冲刺阶段(十一)
    第一次冲刺阶段(十)
    第一次冲刺阶段(九)
    第一次冲刺阶段(八)
  • 原文地址:https://www.cnblogs.com/King-of-Dark/p/13416328.html
Copyright © 2020-2023  润新知