《C++标准程序库》学习笔记3 -- 第五章
这一章主要是大概的介绍一下容器,迭代器,算法,仿函数等,为6,7,8,9章的概括。
- 1.(P74)
STL的基本概念就是将数据和操作分离。数据由容器类别加以管理,操作则由可定制的算法定义。迭代器在两者之间充当粘合剂。任何算法都可以和任何容器交互运作。
- 2.(P75)
容器(Containers)容器类别用来管理一组元素。
总的来说,容器分为两大类:
①.序列式容器(Sequence containers),是可序(ordered)群集。包括vector, queue, list。
②.关联式容器(Associative containers),是已序(sorted)群集。包括set, multiset, map, multimap。
关联式容器依据特定的排序准则,自动为其元素排序。排序准则以函数形式呈现,用以比较元素值(value)或元素键(key)。缺省情况以operator< 进行比较,不过也可以自己提供比较函数,定义出不同的排序准则。
eg
set<int, greater<int> > tk2; // 从大到小排序
序
通常关联式容器是由二叉排序树实作出来的。
另外,C++标准库还提供了容器配接器(Container Adpters), stack, queue, priority queue.
- 3.(P91)
关于pair的key/value。
可以通过first,second访问。
eg
(*pos).second;
- 4.(P93)
迭代器分类:
①.双向迭代器(Bidirectional iterator),list、set、multiset、map、multimap提供的都是这种迭代器
②.随机存取迭代器(Random access iterator),vector、deque、strings所提供的就是这种迭代器
- 5.(P104)
迭代器之配接器(Iterator Adapters)
①Insert iterators(安插型迭代器)
包括back_inserter(), front_inserter(), inserter(),内部分别调用push_back(), push_front(), insert().
②Stream iterators(流迭代器)
istream_iterator<T>(cin)读入T类型,
istream_iterator<T>()产生一个“流结束符”
ostream_iterator<T>(cout)标准读出
③Reverse iterators(逆向迭代器)
下面把三个迭代器一起使用,举个例子:
// Blog: www.WuTianQi.com
#include <cstddef>
#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
list<int> coll1;
for(int i=1; i<=9; ++i)
coll1.push_back(i);
cout << "安插迭代器\n";
vector<int> coll2;
copy(coll1.begin(), coll1.end(), back_inserter(coll2));
deque<int> coll3;
copy(coll1.begin(), coll1.end(), front_inserter(coll3));
set<int> coll4;
copy(coll1.begin(), coll1.end(), inserter(coll4, coll4.begin()));
copy(coll1.begin(), coll1.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(coll2.begin(), coll2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(coll3.begin(), coll3.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(coll4.begin(), coll4.end(), ostream_iterator<int>(cout, " "));
cout << endl;
cout << "---------------------------------------------------\n";
cout << "逆向迭代器\n";
copy(coll1.rbegin(), coll1.rend(), ostream_iterator<int>(cout, " "));
cout << endl;
cout << "---------------------------------------------------\n";
cout << "流迭代器\n";
vector<int> coll5;
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(coll5));
copy(coll5.begin(), coll5.end(), ostream_iterator<int>(cout, " "));
cout << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
- 6.(P124)
不多说,到后面具体学习了再总结。
posted on 2011-01-24 19:03 Tanky Woo 阅读(1741) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述