惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - saintqdd

hdu 1102 pku 2421 解题报告 pku 2777 Count Color 解体报告 石子合并问题 nkoj1139和乘积最大那题一样. A Tour in Loquat Orchard (FZU 2007 ICPC Qualification Round I tzw) 最大黑区域 滑雪 一道经典题,humble number 今天碰到了一个很诡异的题,Alphacode (zoj 2202) 这两天经常碰到dp题,就写了一个0-1背包 实训以来,到这里的次数少了! 郁闷,乘积最大那题WA原来只是因为我用了pow函数引起的! Smith Number POJ强烈推荐50题 JOJ 2391 words POJ 1014 三十分钟掌握STL POJ1006,中国剩余定理 POJ1003,简单题
STL学习小记
saintqdd · 2007-08-04 · via 博客园 - saintqdd

转自:http://blog.chinaunix.net/u/23224/showart.php?id=181144

STL(Standard Template Libarary)主要提供了三类工具:容器container,迭代器iterato,算法

algorithm。
STL提供了两类容器:序列容器——以线性序列方式组织对象;
                关联容器——用关联的键把对象组织在一起。

序列容器:有三种基本类型,分别对应于模版vector<T>,deque<T>和list<T>。他们都存储了一组特定类

型T的对象,这些对象以线性序列方式组织,但每个容器都可以访问以不同方式优化的内容。

vector<T>动态的增加对象的个数,他的大小小于或者等于他的容量。他在尾部删除和添加是最高效的,

相当于简单的数组的组织方式。

deque<T>动态的增加对象的个数,他的大小等于它的容量,他没有capacity()成员函数,他在两端添加和

删除是最高效的。他和vector<T>一样在中间添加和删除,过程比较慢,需要复制已有的元素。由于内部

组织方式不同,deque容器用起来比vector容器略慢。

list<T>的内部组织方式是双向链表,可以在序列的任意位置高效的插入和删除元素。他的主要限制是随

机访问元素比较慢,因为这需要从list的第一个元素或者最后一个元素开始遍历整个list,查找每个元素

所以要根据他们的特点来选择合适的容器。

关联容器:允许使用健存储和提取综合类型的对象。
关联容器有四个基本类型:map<Key,T>,multimap<Key,T>,set<Key>和multiset<Key>。
下略:

STL迭代器,下面迭代器的功能是累加的,输入输出迭代器功能最弱,随机访问迭代器功能最强。
输入输出迭代器:用于读取一些列的对象,且只能使用一次。如需要二次读写序列,就必须创建一个新的

输入输出迭代器。
向前迭代器:合并了输入输出迭代器,可以多次使用。
双向迭代器:与向前迭代器一样,但可以向前向后遍历一系列对象。
随机访问迭代器:提供的功能和双向迭代器相同,还可以随机读写元素。

每种迭代器在运算方面都有限制。
不同的容器支持不同的迭代器。
vector和deque容器支持随机访问迭代器;List,map,multimap,set,multiset容器支持双向迭代器。

STL算法:
STL算法是STL中最大的工具集合。不是所有的算法都和应用程序有关,其中的一些算法还有专门的用途。
算法主要分为三大类:
1:不修改序列的操作:find(),find_end(),find_first(),adjacent_find(),count(),mismatch

(),search(),equal();
2:修改序列的操作:修改序列中的元素。swap(),copy(),transform(),replace(),remove(),reverse

(),rotate(),fill(),radom_shuffle();
3:排序、合并和相关的操作:在一些情况下会改变序列的顺序。sort(),stable_sort(),binary_search

(),merge(),min(),max(),lexicographical_compare().
数值算法:accumulate<>,adjacent_difference<>,inner_product<>,partial_sum<>.

函数对象:重载了函数调用运算符operator()的类对象,专门用于作为参数传送给函数,其效率比使用原

始的函数指针更高。

STL头文件:
<vector>:单端口数组容器
<deque>:双端口数组容器
<list>:双向链表容器
<map>:map和multimap关联数组容器
<set>:set和multiset已排序的设置容器
<bitset>:表示位序列的对象
<queue>:双端口队列(容器适配器)
<stack>:堆栈(容器适配器)
支持迭代器,需要头文件<iterator>,容器头文件中包含迭代器头文件;<map>头文件包含<utility>头文

件,这个头文件中包含定义和管理map和multimap容器所使用的键/值对所需的声明。
算法的声明在头文件<algorithm>中,函数对象的支持由<functional>头文件的声明提供。
数值算法在头文件<numeric>中声明,另外还有<complex>头文件提供复杂数字的支持,<valarray>头文件

提供了数值数组的支持。
另外在流文件集合中还声明了一些迭代器,如:<iostream>,<istream>,<ostream>,<sstream>。这些头文

件利用STL支持基于基本STL算法的输入输出。