重学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、容器与迭代器

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
3、priority_queue(堆排序;底层deque或vector)
priority_queue<int>pq;//默认是最大值优先 priority_queue<int,vector<int>,greater<int>>pq2;//最小值优先 priority_queue<int, vector<int>, less<int>>pq3;//最大值优先
六、空间配置器(allocator)(《STL源码剖析》侯捷)
七、Boost库

浙公网安备 33010602011771号