C++ STL :std::partition_copy,std::back_inserter,std::unary_function

/ C++ / 没有评论 / 1854浏览

C++ STL :std::partition_copy,std::back_inserter,std::unary_function

std::back_inserter: 能用于添加元素到容器尾端的 std::back_insert_iterator ,预期相似的std::front_inserter,std::inserter;

std::partition_copy:把数据根据需求分成两块数据;

std::unary_function:用于创建拥有一个参数的函数的基类。

以上三个新增特性可以点开查看详情,我只是在此搬运一下,让自己知道的更多,以便解决问题,这种方式通过某种方式分割数组或者数据非常方便。

样例:

#include <iostream>
#include <algorithm>
#include <vector>
#include <functional>
#include <string>

using namespace std;

struct Compare : std::unary_function<int, bool>
{
    Compare(std::string&& str)
    {
        cout << str << endl;
    }
    bool operator()(int i)
    {
        return i > 5;
    }
};


int main()
{
    /*int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int true_arr[5] = { 0 };
    int false_arr[5] = { 0 };*/

    std::vector<int> arr = { 1,2,3,4,5,6,7,8,9,10 };
    std::vector<int> true_arr{};
    std::vector<int> false_arr{};

    std::string test = "sss";

    std::partition_copy(arr.begin(), arr.end(), std::back_inserter(true_arr), std::back_inserter(false_arr), Compare(std::move(test)));

    /*std::partition_copy(std::begin(arr), std::end(arr), std::begin(true_arr), std::begin(false_arr),
        [](int i) {return i > 5; });*/

    std::cout << "true_arr: ";
    for (auto x : true_arr) {
        std::cout << x << ' ';
    }
    std::cout << '\n';

    std::cout << "false_arr: ";
    for (auto x : false_arr) {
        std::cout << x << ' ';
    }
    std::cout << '\n';

    system("PAUSE");
    return 0;
}
#输出:
sss
true_arr: 6 7 8 9 10
false_arr: 1 2 3 4 5