C++ STL结构总结

1. 什么是STL

  它的全名是stand template library, 标准模板库,主要是将一些结构和算法写成模板,以便能够实现对任意类型的对象都可以操作,而不需要再一次去写一些算法及结构。

  它主要有以下三个概念:

    容器--容纳各种数据类型的结构,是类模板

    迭代器--类似于指针,指向容器内的对象的指针,主要用于指向元素

    算法--操作容器内的元素的运算函数,是函数模板,比如sort,find等排序算法,查找 算法,它与容器内元素类型无关

2.  容器

  用于存放数据的容器可以分为三大类,顺序容器,关联容器,容器适配器:

  顺序容器--vector, list, deque

  关联容器--map, multimap, set, multiset

  容器适配器--stack, queue, priority_queue

2.1 顺序容器

  顺序容器是无序的,插入的元素位置与值无关。

  vector容器,头文件<vector>, 是一个动态数据,元素在内存中是连续存放的,可以随意取vector中的元素。 

  deque, 头文件<deque>, 是一个双向队列,元素在内存中连续存放,可任意取容器中的元素,与vector中不一样的是,它存在一个头指针和一个尾指针,如

  list, 头文件<list>, 是一个双向链表,元素内存中不连续存放,易添加删除元素,不可随意存取元素。

2.2 关联容器

  关联容器是有序的,插入元素的同时对新加元素进行排序,如何排序取决于元素类中<符号的成员函数重载, 所有的容器都是以平衡二叉树来实现,查找时间为O(lgn).

  set/multiset, 头文件<set>, 又称集合,两者唯一的区别是set不允许多个元素相等,而multiset则可以存放多个相等的元素,至于两个元素相等的定义为:

如元素A不小于元素B,也不大于B,则A与B相等。因此在此仍需要重载容器内元素类的<符号函数,才能让容器函数对元素进行大小比较。

  map/multimap, 头文件<map>, 又称字典,元素内存在两个成员变量:first与second,它们一一对应,容器内以first的大小进行排序,first为key,second为first对应的值。multimap允许存在first相同的元素,而map则要求所有的元素first中值唯一。

2.3 容器适配器

  stack,头文件<stack>, 栈,遵守先进后出的规则

  queue,头文件<queue>, 队列, 元素先进先出,如图

  priority_queue, 优先级队列,头文件<queue>, 内部以一定的顺序排列,优先级最高的元素第一个出列。

2.4  容器中的成员函数

  顺序容器与关联容器的公有成员函数:

    begin-- 返回指向第一个元素的迭代器

    end--返回指向最后一个元素的后一个迭代器

    rbegin--返回指向最后一个元素的迭代器

    rend--返回指向第一个元素的前一个迭代器

    erase -- 删除容器中的一个或几个元素

    clear -- 删除容器内所有的元素

  顺序容器的成员函数:

    front -- 返回第一个元素的引用

    back -- 返回最后一个元素的引用

    push_back -- 在容器尾添加新元素

    pop_back -- 删除容器尾的元素

    erase -- 删除迭代器指向的元素或一个区间内的所有元素,返回删除元素的下一个元素的迭代器

3. 迭代器

  类似于指针的用法,主要用于指向元素对象的位置,其定义如下:

    容器类名::iterator  it;

    容器类名::const_iterator  it;  //常量迭代器,不可修改对象的值

    容器类名::reverse_iterator  it; //反向迭代器, it++指向前一个元素,如果是正向迭代器,则指向下一个元素

  比较特殊的迭代器就是随机迭代器,可以进行操作 it + i, 直接跳进i个元素

  

时间: 2024-09-30 19:05:13

C++ STL结构总结的相关文章

C++ STL自学总结,仅供参考

本文内容,为博主在网上看到资料总结整合而来 一.stl格式简介 .stl文件是在计算机图形应用系统,来表示封闭的面或者体,用来表示三角形网格的一种文件格式.为STereo Lithography的缩写,由3D Systems公司于1987年开发而来,利用三角片离散近似表示三维模型,近年来已经成为快速原型技术领域广泛应用的文件格式和接口标准. 一个stl文件坐标必须是正数,没有比例信息,单位是任意的. 二.stl文件格式 stl文件分为ASCII明码格式和二进制格式. ASCII格式的stl结构如

OpenCV Tutorials &mdash;&mdash; Interoperability with OpenCV 1

新版本的OpenCV 使用Mat作为基本的图像容器,而代替旧版本的 CvMat 和 IplImage All the OpenCV related stuff is put into the cv namespace to avoid name conflicts with other libraries data structures and functions. Therefore, either you need to prepend the cv:: keyword before eve

FFLIB之FFLUA——C++嵌入Lua&amp;扩展Lua利器[转]

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一.Lua的轻量.小巧.概念之简单,都使他变得越来越受欢迎.本人也使用过python做嵌入式脚本,二者各有特点,关于python之后会写相关的文章,python对于我而言更喜欢用来编写工具,我前边一些相关的算法也是用python来实现的.今天主要讲Lua相关的开发技术.Lua具有如下特点: Lua 拥有虚拟机的概念,而其全部用标准C实现,不依赖任何库即可编译安装,更令人欣喜的是,整个Lua 的实现代码并不算多,

如何在STL的map中使用结构体作为键值

这里首先给出容器map的原型: template < class Key, class T, class Compare = less<Key>, class Alloc = alloc> class map{ ... } 可以看到模板参数一共有四个,第一个就是Key,即键:第二个就是值:第四个就是空间配置器,默认使用alloc(随STL版本不同而不同).那么第三个是啥? 我们知道,map的底层数据结构,其实是树,更确切的说,是一个RB-tree(红黑树).RB-tree树在进行插

hdu 4941 Magical Forest(STL map &amp; 结构体运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 220    Accepted Submission(s): 105 Problem Description There is a forest c

QT:用QSet储存自定义结构体的问题——QSet和STL的set是有本质区别的,QSet是基于哈希算法的,要求提供自定义==和qHash函数

前几天要用QSet作为储存一个自定义的结构体(就像下面这个程序一样),结果死活不成功... 后来还跑到论坛上问人了,丢脸丢大了... 事先说明:以下这个例子是错误的 [cpp] view plaincopyprint? #include <QtCore> struct node { int cx, cy; bool operator < (const node &b) const { return cx < b.cx; } }; int main(int argc, cha

poj 2243 bfs 利用 结构体中的step成员保存步数 ,STL的队列

//BFS #include <iostream> #include <queue> using namespace std; bool used[8][8]; int move[8][2]={1,2, -1,2, -2,1, -2,-1, -1,-2, 1,-2, 2,-1, 2,1}; struct position { int i,j; int step; position(int a,int b,int c) { i=a; j=b; step=c; } }; int mai

C++ 泛型程序设计与STL模板库(1)---泛型程序设计简介及STL简介与结构

泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念 用来界定具备一定功能的数据类型.例如: 将"可以比大小的所有数据类型(有比较运算符)"这一概念记为Comparable 将"具有公有的复制构造函数并可以用'='赋值的数据类型"这一概念记为Assignable 将"可以比大小.具有公有的复制构造函数并可以用'='赋值的所有数据类型"这个概念记

c++ STL map 结构体

Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 在一些特殊情况,比如关键字是一个结构体,涉及到排序就会出现问题,因为它没有小于号操作,i