STL标准库(一)

目录

1.containers容器
2.iterators迭代器
3.allocator空间配置器
4.adapters配接器
5.algorithms算法
6.functors仿函数

致敬开发者Alexander Stepanov、Meng Lee和David R Musser

containers

算法重要,但是算法是建立在对数据操作的基础上,如何存放数据显得尤为重要。在STL开发者大牛的创造下,产生了各种各样可以存储数据的“盒子”,如list、map、vector、stack等等,在之前的文章中着重介绍了vector和list。容器部分主要由头文件vector,list,deque,set,map,stack和queue组成。

iterators

如果说算法是发动机,容器是轮子,那么迭代器就是传动轴。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。

除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator)。迭代器是一种检查容器内元素并遍历元素的数据类型。

标准库为每一种标准容器(包括vector)定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的vector 类型也是这样。

vector<int>::iterator iter;

每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。如果容器中有元素的话,由 begin 返回的迭代器指向第一个元素:

 vector<int>::iterator iter =ivec.begin();

上述语句把 iter 初始化为由名为 vector 操作返回的值。假设 vector 不空,初始化后,iter 即指该元素为 ivec[0]。
由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。“超出末端迭代器”(off-the-enditerator)。表明它指向了一个不存在的元素。如果 vector 为空,begin 返回的迭代器与 end 返回的迭代器相同。

由 end 操作返回的迭代器并不指向 vector 中任何实际的元,这类似于链表返回空,但是并没有实际指向,只是一个简单的信号。
来看一个简单的迭代器使用,以base()将逆向迭代器转回正常迭代器:

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
 
int main()
{
    list<int> coll;

    for (int i=1; i<=9; ++i) {
        coll.push_back(i);
    }
    list<int>::iterator pos;
    pos = find (coll.begin(), coll.end(), 5);                          

    cout << "pos:   " << *pos << endl;
 

    list<int>::reverse_iterator rpos(pos);
 
    cout << "rpos:  " << *rpos << endl;

    list<int>::iterator rrpos;
    rrpos = rpos.base();
 
    cout << "rrpos: " << *rrpos << endl;
}

迭代器部分主要由头文件utility,iterator和memory组成。utility是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,iterator中提供了迭代器使用的许多方法,而对于memory的描述则十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,memory中的主要部分是模板类allocator,它负责产生所有容器中的默认分配器。

adapters

到了最香的地方了!不需要去反复写快排或者疯狂for来遍历了,STL提供了很多类似的函数可以用,每个函数在很大程度上都是独立的,更加提高了我们的编程效率,简直不要太香了!!
numeric库中含有一些简单的加减乘除等等的操作,库也比较小,基本的操作都可以在它里面找到。对常用的函数总结推荐大家看看这篇博客STL函数

发布了25 篇原创文章 · 获赞 60 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/EIDoradol/article/details/105440232