STL中六大组件的关系

来源:互联网 发布:mac的废纸篓在哪 编辑:程序博客网 时间:2024/06/05 16:17

六大组件:

容器(containers):各種資料結構,如 vector, list, deque, set, map,用来存放“元素”。就是template class。

演算法(algorithms):各種常用演算法如 sort, search, copy, erase,就是template class。

迭代器(iterators):是所謂的「泛型指標」,是㆒種將 operator*, operator->, operator++, operator-- 等指標相關操作予以多載化的 class template。所有STL 容器都附帶有自己專屬的迭代器 — 是的,只有容器設計者才知道如何巡訪自己的元素。原生指標(nativepointer)也是㆒種迭代器。

仿函式(functors):行為類似函式,可做為演算法的某種策略(policy),從實作的角度看,仿函式是㆒種重載了operator()的class 或class template。原生的函式指针可視為狹義的仿函式。

配接器(adapters):㆒種用來封装容器(containers)或仿函式(functors)或迭代器(iterators)介面的東西。例如 STL 提供的queue 和stack,雖然看似容器,其實只能算是㆒種容器配接器,因為它們的底部完全借重deque,所有動作都由底層的deque 供應。

配置器(allocators):負責空間配置與管理,從實作的角度看,配置器是㆒個實現了動態空間配置、空間管理、空間釋放的class template

之间关系:

空间配置器-->容器-->迭代器-->算法<--仿函式

算法需要使用迭代器仿函式作为参数来运算。如:for_each(begin, end, print())。任何一个算法都需要迭代器提供一个容器中的“区间”来表示操作范围。这个区间是前闭后开(begin, end],即:包含begin但不包含end。
template
Function for_each(InputIterator first, InputIterator last, Function f)
{
    for ( ; first != last; ++first)
        f(*first);
    return f;
}
许多算法都提供了两个版本,一个不包含“仿函式”用于缺省的算法,另一个包含“仿函式”(算子)用于用户自定义的“演算规则”。

配接器则对容器迭代器仿函式进行各种封装。

空间配置器容器中的“元素”提供存储空间。

原创粉丝点击