【读书笔记】以函数作为算法的实参

1.范例
foreach

void print(int e)
{
    cout << e<<' ';
}

int _tmain(int argc, _TCHAR* argv[])
{
    list<int> vi;
    for (int i = 0; i < 6;i++)
    {
        vi.push_front(i);
        vi.push_back(i);
    }
    for_each(vi.begin(), vi.end(), print);

}

再一个例子,容器之间变换
transform

int square(int x)
{
    return x*x;
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> vi;
    for (int i = 0; i < 6;i++)
    {
        //vi.push_front(i);
        vi.push_back(i);
    }

    set<int> si;
    transform(vi.begin(), vi.end(), inserter(si,si.begin()), square);

    copy(si.begin(), si.end(), ostream_iterator<int>(cout, " "));

}

2.判断式

Predicate是一种特殊的辅助函数,这种辅助函数会返回布尔值,常被用来指定排序准则或者查找准则。
单参数判断式

bool isPrime(int x)
{
    if (x == 0 || x == 1)
    {
        return false;
    }

    int div;
    for (div = x / 2; x%div != 0; --div)
    {
        ;
    }
    return div == 1;
}

int _tmain(int argc, _TCHAR* argv[])
{
    vector<int> vi;
    for (int i = 24; i < 30;i++)
    {
        //vi.push_front(i);
        vi.push_back(i);
    }

    auto pos = find_if(vi.begin(), vi.end(), isPrime);

    if (pos!=vi.end())
    {
        cout << *pos;
    }

}

多参判断式

class Person
{
public:
    Person(string firstname, string familyname) :_firstname(firstname), _familyname(familyname){}
    string firstname()const { return _firstname; }
    string familyname() const { return _familyname; }

private:
    string _firstname;
    string _familyname;
};
bool personSort(Person& p1, Person& p2)
{
    return p1.familyname() < p2.familyname() ||
        (p1.familyname() == p1.familyname() &&
        p1.firstname() < p2.firstname());
}

int _tmain(int argc, _TCHAR* argv[])
{
    deque<Person> dp;
    dp.push_back(Person("a", "b"));
    dp.push_back(Person("a", "d"));
    dp.push_back(Person("a", "c"));
    dp.push_back(Person("a", "f"));

    for (auto& a:dp)
    {
        cout << a.firstname() << " " << a.familyname() << endl;
    }

    sort(dp.begin(), dp.end(), personSort);
    cout << endl;
    for (auto& a : dp)
    {
        cout << a.firstname() << " " << a.familyname() << endl;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值