编程语言
首页 > 编程语言> > C++ STL 容器

C++ STL 容器

作者:互联网

什么是STL

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的sort()函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组;

STL另一个重要特性是它不是面向对象的。 为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效;

从逻辑层次来看,在STL中体现了泛型化程序设计的思想,引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术;

从实现层次看,整个STL是以一种类型参数化的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性--模板(template)。

STL内容

STL中六大组件:

容器

STL中的容器有 序列式容器,关联容器,容器适配器(congtainer adapters:stack, queue,priority queue,位集(bit_set,串包(string_package)等等。

(1) 序列式容器(Sequence containers),每个元素都有固定位置,元素位置取决于插入时机和地点,和元素值无关,arrayvectordequelist

(2) 关联式容器(Associated containers),元素位置取决于特定的排序准则,和插入顺序无关,setmultisetmapmultimap等。

(3) 容器适配器,适配器是容器的接口,它本身不能直接保存元素,它保存元素的机制是调用另一种顺序容器去实现,STL 中包含三种适配器:stackqueuepriority_queue

除上述容器外,c++ 11中又增加了无序容器:unordered_map,unordered_multimap,unordered_set,unordered_multiset

容器类自动申请和释放内存,无需new和delete操作。

Array & Vector容器

Array&Vector笔记

Queue & Deque容器

Queue & Deque笔记

list容器

List 笔记

map/multimap 容器

map & multimap 笔记

priority_queue 容器

priority_queue 笔记

STL算法

STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成。要使用 STL中的算法函数必须包含头文件<algorithm>,对于数值算法须包含<numeric><functional>中则定义了一些模板类,用来声明函数对象。
STL中算法大致分为四类:

  1. 非可变序列算法:指不直接修改其所操作的容器内容的算法。
  2. 可变序列算法:指可以修改它们所操作的容器内容的算法。
  3. 排序算法:包括对序列进行排序和合并的算法、搜索算法以及有序序列上的集合操作。
  4. 数值算法:对容器内容进行数值计算。

查找算法

//在 [first, last) 区域内查找不小于 val 的元素
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,
                             const T& val);
//在 [first, last) 区域内查找第一个不符合 comp 规则的元素
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last,
                             const T& val, Compare comp);
//查找 [first1, last1) 范围内第一个 [first2, last2) 子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,
                        ForwardIterator first2, ForwardIterator last2);
//查找 [first1, last1) 范围内,和 [first2, last2) 序列满足 pred 规则的第一个子序列
ForwardIterator search (ForwardIterator first1, ForwardIterator last1,
                        ForwardIterator first2, ForwardIterator last2,
                        BinaryPredicate pred);
//在 [first, last] 中查找 count 个 val 第一次连续出现的位置
ForwardIterator search_n (ForwardIterator first, ForwardIterator last,
                          Size count, const T& val);
//在 [first, last] 中查找第一个序列,该序列和 count 个 val 满足 pred 匹配规则
ForwardIterator search_n ( ForwardIterator first, ForwardIterator last,
                           Size count, const T& val, BinaryPredicate pred );

标签:容器,ForwardIterator,last,STL,元素,C++,first
来源: https://www.cnblogs.com/loganxu/p/15402676.html