本笔记来自于哔哩哔哩《[侯捷]C++ STL 体系结构与内核分析–从平地到万丈高楼》,可以参考学习。
STL可以分为六个部分,各个部分的关系如下:
这里写一个包含了六个模块的小例子:
#include<vector>
#include<algorithm>
#include<functional>
#include<iostream>
using namespace std;
//一个包含了六个模块的小程序
void example1()
{
int ia[6] = { 27,210,12,47,109,83 };//数组
//以数组的头尾来建立容器,类型为int,适配器(分配内存用的)为int形
vector<int, allocator<int>> vi(ia, ia + 6);
//countf是计数算法,vi.begin()和vi.end()是迭代器。
//not1是取反,bind2nd是把两个对象绑定,less<int>()是用来比较大小的,这里的意思是计算“小于40再取反”,即“大于40”的元素个数。
cout << count_if(vi.begin(), vi.end(), not1(bind2nd(less<int>(), 40)));
}
包含关系如下:
运行结果截图:
重点说明迭代器:
c++迭代器中所有的标准都是“前闭后开”。
一个迭代器的小例子(请使用相同的头文件)
//迭代器的使用
void example2()
{
int ia[6] = { 27,210,12,47,109,83 };
vector<int, allocator<int>> vi(ia, ia + 6);
//基本迭代器输出
for (vector<int>::iterator iter = vi.begin(); iter != vi.end(); ++iter)
{
cout << *iter << " ";
}
cout << endl << endl;
//C++11新语法
for (int i : {1, 2, 3, 4, 5, 6, 7, 8, 9})
{
cout << i << " ";
}
cout << endl << endl;
//使用智能指针输出
for (auto elem : vi)
{
std::cout << elem << " ";
}
cout << endl;
//智能指针作为引用
for (auto& elem : vi)
{
elem *= 2;
}
//再次输出查看结果
for (auto elem : vi)
{
std::cout << elem << " ";
}
cout << endl;
}
运行结果截图: