天天看點

重學c++(七)

一、transform算法&lambda表達式

1、兩個重載版本

  transform(first,last,result,op);//first是容器的首疊代器,last為容器的末疊代器,result為存放結果的容器,op為要進行操作的一進制函數對象或sturct、class。

  transform(first1,last1,first2,result,binary_op);//first1是第一個容器的首疊代 器,last1為第一個容器的末疊代器,first2為第二個容器的首疊代器,result為存放結果的容器,binary_op為要進行操作的二進制函數 對象或sturct、class。(注意:第二個重載版本必須要保證兩個容器的元素個數相等才行,否則會抛出異常)

2、[函數對象參數] (操作符重載函數參數) mutable 或 exception 聲明 -> 傳回值類型 {函數體}

3、例子

int ones[] = { 1,2,3,4,5 };
    int twos[] = { 10,20,30,40,50 };
    int results[5];
    transform(ones,ones+5,twos,results,std::plus<int>());

    for_each(results,results+5,
        [](int a)->void {
        cout << a << endl; });      

二、STL容器的統計與二分查找

int arr[] = { 0,1,2,3,4,5,6,6,7,7,7,8 };
    vector<int>iA(arr + 2, arr + 6);
    cout << count(arr, arr + sizeof(arr) / sizeof(arr[0]), 7) << endl;;
    cout << count_if(arr, arr + sizeof(arr) / sizeof(arr[0]), bind2nd(less<int>(),7)) << endl;
    cout << count_if(arr, arr + sizeof(arr) / sizeof(arr[0]), bind1st(less<int>(), 7)) << endl;
    cout << binary_search(arr,arr+ sizeof(arr) / sizeof(arr[0]),9) << endl;
    cout << *search(arr, arr + sizeof(arr) / sizeof(arr[0]), iA.begin(), iA.end()) << endl;
      

三、STL全排列(前提必須保證順序)

char test[] = "123";
    do {
        cout << test[0] << " " << test[1] << " " << test[2] << endl;
    } while (next_permutation(test, test + 3));      
char test[] = "321";
    do {
        cout << test[0] << " " << test[1] << " " << test[2] << endl;
    } while (prev_permutation(test, test + 3));      

四、疊代器

1、正向疊代器iterator;反向疊代器reverse_iterator;常量正向疊代器const_iterator;常量反向疊代器const_reverse_iterator

2、容器與疊代器

重學c++(七)
list<int>n;
    n.push_back(3);
    n.push_back(4);
    n.push_front(2);
    n.push_front(1);

    list<int>::reverse_iterator it;
    for (it = n.rbegin(); it != n.rend(); it++)
        cout << *it << endl;      

五、容器擴充卡

1、stack(底層deque)

2、queue

priority_queue<int>pq;//預設是最大值優先
    priority_queue<int,vector<int>,greater<int>>pq2;//最小值優先
    priority_queue<int, vector<int>, less<int>>pq3;//最大值優先