【侯捷老师STL与泛型编程】

STL概览

六大部件

六大部件的关系示意图

  • 容器
  • 分配器
  • 算法
  • 迭代器
  • 适配器
  • 仿函数

不同于面向对象设计

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>

using namespace std;

int main()
{
int ia[6]={27,210,15,47,109,86};
vector<int,allocator<int>> vi(ia,ia+6);
cout<<count_if(vi.begin(),vi.end(),not1(bind2nd(less<int>(),40)));
return 0;
}

image-20260520234222442

组件 类型 作用
count_if 算法 统计区间中满足一元谓词的元素个数
vi.begin() 容器成员函数 返回指向首元素的迭代器
vi.end() 容器成员函数 返回指向尾后位置的迭代器
less<int> 二元函数对象 x < y
bind2nd 函数适配器(C++98) 将一个二元函数绑定第二个参数,得到一元函数
not1 函数适配器(C++98) 对一元谓词取逻辑非(!

CPP11之后建议写成如下形式:

1
2
3
count_if(vi.begin(), vi.end(), [](int x) { return x >= 40; });
//或者
count_if(vi.begin(), vi.end(), bind2nd(greater_equal<int>(), 40));