cpp学习笔记(四)

第22章 理解函数对象
第23章 STL算法
第24章 自适应容器:栈和队列
第25章 使用STL位标志

第22章 理解函数对象
函数对象的概念
将函数对象作为谓词
如何使用函数对象实现一元和二元谓词

第23章 STL算法
了解算法的分类:变序算法和非变序算法
非变序算法
计算cout cout_if
搜索 search,search_n,find,find_if,find_end,find_first_of,adjacent_find
比较算法
equal,mismatch,lexicographical_compare

变序算法
初始化算法 fill,fill_n,generate,generate_n
修改算法 for_each,transform
赋值算法 copy copy_backward
删除算法 remove remove_if remove_copy remove_copy_of unique unique_copy
替换算法
replace replace_if
排序算法
sort,stable_sort,partial_sort,partial_sort_copy

分区算法
    partition
    stable_partition
可用于排序容器的算法
    binary_search
    lower_bound
    upper_bound

第24章 自适应容器:栈和队列
栈和队列的行为特征
使用stack
使用queue
使用STL priority_queue

第25章 使用STL位标志
bitset类
vector

//
//  main.cpp
//  more_stl_22_25
//
//  Created by bikang on 16/10/09.
//  Copyright (c) 2016年 bikang. All rights reserved.
//

#include <iostream>
#include <algorithm>
#include <list>
#include <vector>
#include <set>
#include <stack>
#include <queue>
#include <bitset>

using namespace std;

template <typename elementType>
struct Display
{
    int mCount;
    Display(){
        mCount = 0;
    }
    void operator () (const elementType & elem){
        ++mCount;
        cout << elem << " ";
    }
};

template <typename numberType>
struct IsMultiple {

    numberType mDiv;
    IsMultiple(const numberType&div){
        mDiv = div;
    }

    bool operator ()(const numberType& elem)const{
        return ((elem%mDiv) == 0);
    }

};

//二元函数
template <typename numberType>
class CMultiple {
public:
    numberType operator ()(const numberType& elem1,const numberType& elem2){
        return elem1*elem2;
    }

};


class XMultiple {
public:
    bool operator ()(const int& elem1,const int& elem2){
        return (elem1 < elem2);
    }

};




void tfuncOjbect21();
void tfuncAlgorithm22();//algorithm略过了,到时候查参考手册
void tfuncStackQueue23();

void tfuncBitset25();

int main(int argc, const char * argv[]) {
    //tfuncOjbect21();
    //tfuncStackQueue23();
    tfuncBitset25();
    return 0;
}

void tfuncBitset25(){
    //bitset
    bitset<4> b1;
    cout << b1 << endl;
    bitset<5> b2(string("10101"));
    cout << b2 << endl;
    bitset<5> b3(255);
    cout << b3 << endl;
    b2.set(2,0);
    cout << b2<<endl;
    bitset<4>b4(b1);
    bitset<4>b5(string("1010"));
    cout << (b4 | b5)<<endl ;
    //vector<bool>
    vector<bool> vecb(1);
    vecb[0] = false;
    vecb.push_back(true);

    for(int i=0;i<vecb.size();i++){
        cout << vecb[i]<<",";
    }


}

void tfuncStackQueue23(){
    //use stack
    //stack<int> s1;
    stack<int,vector<int>> s1;
    s1.push(6);
    s1.push(2);
    s1.push(3);
    s1.push(5);
    cout << s1.size() <<endl;
    while(s1.size() != 0) s1.pop();
    if(s1.empty()) cout << "s1 empty"<<endl;

    //use queue
    queue<int,list<int>> q1;
    q1.push(6);
    q1.push(2);
    q1.push(3);
    q1.push(5);
    cout << q1.size()<<endl;

    //priority_queu
    priority_queue<int> pq1;
    pq1.push(6);
    pq1.push(2);
    pq1.push(13);
    pq1.push(5);
    cout << pq1.top()<<endl;
    pq1.pop();
    cout << pq1.top()<<endl;



}

void tfuncOjbect21(){
    //实现了operator的对象
    //一元函数,二元函数
    vector<int> vec1;
    for (int i=1; i<10; ++i) {
        vec1.push_back(i);
    }

    vector<int> vec2;
    for (int i=11; i<20; ++i) {
        vec2.push_back(i);
    }

    Display<int> res;
    res = for_each(vec1.begin(), vec1.end(), Display<int>());
    cout <<endl << res.mCount<<endl;

    //一元谓词的使用
    vector<int>::iterator iter1;
    iter1 = find_if(vec1.begin(), vec1.end(), IsMultiple<int>(4));
    if(iter1 != vec1.end()){
        cout << *iter1 <<endl;
    }
    vector<int>result;
    result.resize(9);
    //二元函数的使用
    transform(vec1.begin(), vec1.end(), vec2.begin(),result.begin(),CMultiple<int>());

    for(iter1=result.begin();iter1!=result.end();++iter1){
        cout << *iter1<<",";
    }
    cout << "\n";
    //二元谓词的使用,可以用来排序

    typedef set<int ,XMultiple> SET_NUMBERS;
    SET_NUMBERS s1;
    s1.insert(123);
    s1.insert(2);
    s1.insert(1);

    SET_NUMBERS::const_iterator ite1;
    for (ite1=s1.begin(); ite1!= s1.end(); ite1++)
    {
        cout << *ite1 <<",";
    }


}


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值