C++STL学习第一篇(什么是STL以及string的各种功能用法) ...

打印 上一主题 下一主题

主题 896|帖子 896|积分 2688

STL

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间设置器。

  • 数据结构和容器管理:STL 提供了多种数据结构和容器,如向量(vector)、链表(list)、聚集(set)、映射(map)等。这些容器可以帮助程序员方便地存储和管理数据,根据需求举举措态调整和操纵。
  • 算法和数据处理:STL 中提供了大量的算法,如排序、查找、遍历等,这些算法可以直接应用于不同范例的容器,帮助程序员高效地对数据举行处理和操纵。
  • 迭代器和访问控制:STL 中的迭代器提供了同一的访问接口,使得程序员能够方便地遍历容器中的元素并举行读写操纵。迭代器可以灵活地控制访问范围和方式,为数据访问提供了高度的灵活性。
  • 泛型编程:STL 的设计基于泛型编程思想,通过模板机制实现了通用的数据结构和算法。这使得 STL 能够适用于各种数据范例,并且支持用户自界说范例的操纵,从而提高了代码的重用性和可扩展性。
  • 性能优化:STL 中的容器和算法都经过高度优化,使用 STL 可以借助这些优化的实现来提高程序的实验效率和性能。
总的来说,STL 适用于必要数据结构、算法和迭代器等功能的各种场景。它为 C++ 程序员提供了丰富的工具和功能,帮助他们更加高效地处理和操纵数据,提高代码的可读性、重用性和性能。无论是简朴的数据存储管理还是复杂的数据处理和算法实现,STL 都是一个强大而实用的工具库。
容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。
算法:各种常用的算法,如sort、find、copy、for_each。从实现的角度来看,STL算法是一种function tempalte.
迭代器:扮演了容器与算法之间的胶合剂,共有五种范例,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator--等指针相关操纵予以重载的class template. 所有STL容器都附带有本身专属的迭代器,只有容器的设计者才知道如何遍历本身的元素。原生指针(native pointer)也是一种迭代器。
仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template
适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
空间设置器:负责空间的设置与管理。从实现角度看,设置器是一个实现了动态空间设置、空间管理、空间释放的class tempalte.
STL优点


  • STL 是 C++的一部分,因此不用额外安装什么,它被内建在你的编译器之内。
  • STL 的一个重要特点是数据结构和算法的分离。尽管这是个简朴的概念,但是这种分离使得 STL 变得非常通用。例如:在 STL 的 vector 容器中,可以放入元素、根本数据范例变量、元素的地址;STL 的 sort() 排序函数可以用来操纵 vector,list 等容器。
  • 程序员可以不用思考 STL 详细的实现过程,只要能够熟练使用 STL 就 OK 了。这样他们就可以把精神放在程序开发的别的方面。
  • STL 具有高可重用性,高性能,高移植性,跨平台的优点。
STL三大组件

容器

常用的数据结构无外乎数组(array),链表(list),tree(树),栈(stack),队列(queue),聚集(set),映射表(map),根据数据在容器中的分列特性,这些数据分为序列式容器关联式容器两种。
Ø 序列式容器就是容器元素在容器中的位置是由元素进入容器的时间和地点来决定。Vector容器、Deque容器、List容器、Stack容器、Queue容器。
Ø 关联式容器是指容器已经有了一定的规则,容器元素在容器中的位置由我的规则来决定。Set/multiset容器 Map/multimap容器
算法

算法分为:质变算法非质变算法
质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等
非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等
迭代器

迭代器(iterator)是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。在一书中提供了23中设计模式的完备描述,其中iterator模式界说如下:提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
迭代器的设计思维-STL的关键地点,STL的中心思想在于将数据容器(container)和算法(algorithms)分开,彼此独立设计,最后再一贴胶着剂将他们拉拢在一起。从技能角度来看,容器和算法的泛型化并不困难,c++的class template和function template可分别到达目标,如果设计出两这个之间的良好的胶着剂,才是浩劫题。
迭代器的种类:
输入迭代器提供对数据的只读访问只读,支持++、==、!=输出迭代器提供对数据的只写访问只写,支持++前向迭代器提供读写操纵,并能向前推进迭代器读写,支持++、==、!=双向迭代器提供读写操纵,并能向前和向后操纵读写,支持++、--,随机访问迭代器提供读写操纵,并能在数据中随机移动读写,支持++、--、[n]、-n、=[code]void test2() {        vectorr;//STL 中的标准容器之一 :动态数组        r.push_back(1);//vector 容器提供的插入数据的方法        r.push_back(2);        r.push_back(7);        //vector 容器提供了 begin()方法 返回指向第一个元素的迭代器        //vector 容器提供了 end()方法 返回指向最后一个元素下一个位置的迭代器        vector::iterator reg = r.begin();        vector::iterator ina = r.end();//这是一种随机访问范例的迭代器        while (reg != ina) {                cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表