C++标准模板库STL的介绍
介绍
- STL(standard template library)标准模板库,是一种高效的C++程序库。
- STL分为三类:container(容器),iterator(迭代器)和algorithm(算法)。
容器(container)
容器是用来管理某一类对象的集合,包括序列式容器和关联式容器。
- 序列式容器:vector,list,deque
- 关联式容器:map,set
遵循规则:
1.所有容器中存放的都是值而非引用。因此容器中的每个元素必须能够被拷贝,如想存放的不是副本,容器元素只能是指针。
2.容器中所有元素都是有次序(order)的,可以进行一次或多次遍历每个元素。
迭代器(iterators)
迭代器用于遍历对象集合的元素,这些集合可能是容器也可能是容器子集。
所有容器都提供获得迭代器的函数。
begin() 返回一个迭代器,指向第一个元素 end() 返回一个迭代器,指向最后一个元素
算法(algorithm)
算法作用于容器,包括对容器内容进行初始化,排序,搜索和转换等操作。
STL算法分为四类:
1.非可变序列算法:不直接修改容器中内容。
2.可变序列算法:可以直接修改容器的内容。
3.排序算法:包含对序列的排序,合并,搜索和对有序序列的操作等算法那。
4.数值算法:对容器内容计算。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
相关推荐
-
C++ STL入门教程(6) set(集合)的使用方法
一.简介 集合(Set)是一种包含已排序对象的关联容器,不允许有重复元素. 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <set> #include <iostream> using namespace std; int main() { ///1. 初始化 set<int> num; set<int>::iterator iter; cout << num.max_size() << endl;///s
-
C++/STL实现判断平面内两条线段的位置关系代码示例
概念 平面内两条线段位置关系的判定在很多领域都有着广泛的应用,比如游戏.CAD.图形处理等,而两线段交点的求解又是该算法中重要的一环.本文将尽可能用通俗的语言详细的描述一种主流且性能较高的判定算法. 外积,又称叉积,是向量代数(解析几何)中的一个概念.两个二维向量v1(x1,y1)和v2(x2,y2)的外积v1×v2=x1y2-y1x2.如果由v1到v2是顺时针转动,外积为负,反之为正,为0表示二者方向相同(平行).此外,文中涉及行例式和方程组的概念,请参阅线性代数的相关内容. 为方便计算,对坐
-
C++ STL入门教程(2) list双向链表使用方法(附程序代码)
一.简介 "Unlike other standard sequence containers, list and forward_list objects are specifically designed to be efficient inserting and removing elements in any position, even in the middle of the sequence." Lists将元素按顺序储存在链表中.与向量(vector)相比, 它允许快速
-
C++ STL list 遍历删除出错解决方案
C++ STL list 遍历删除崩溃 错误用法一 下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602 表明it不能再作为迭代器进行运算,自然会报错. #include <map> #include <list> using namespace std; typedef std::list<int > TESTLIST; int _tmain(int argc, _TCHAR*
-
C++ STL入门教程(1) vector向量容器使用方法
一.简介 Vectors 包含着一系列连续存储的元素,其行为和数组类似. 访问Vector中的任意元素或从末尾添加元素都可以在O(1)内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是O(N). 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <vector> #include <iostream> #include <algorithm> #include <stdexcept> using namespace
-
浅谈c++ stl迭代器失效的问题
之前看<C++ Primier>的时候,也解到在顺序型窗口里insert/erase会涉及到迭代器失效的问题,并没有深究.今天写程序的时候遇到了这个问题. 1 莫名其妙的Erase 最初我的程序是酱紫的,别说话,我知道这样是有问题的,可这样是最直观的想法 int arr[]={0,1,2,3,4,5,6,7,8,9,10}; vector<int> a(arr,arr+sizeof(arr)/sizeof(*arr));for (auto it = a.begin(); it !=
-
浅谈c++中的stl中的map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处. 下面举例说明什么是一对一的数据映射.比如一个班级中,每个学生的学号跟他的姓名就存在着一一
-
C++ STL入门教程(7) multimap、multiset的使用
一.multimap(一对多索引) C++ multimap和map所支持的操作相同(除了multimap不支持下标运算),但是multimap允许重复的元素. 完整程序代码: /*请务必运行以下程序后对照阅读*/ ///头文件依旧是map #include <map> #include <string> #include <iostream> using namespace std; int main() { ///1. 初始化 multimap<int, st
-
C++中 STL list详解及简单实例
C++中 STL list详解 1.List: 内部实现是一个双向链表,可以高效的进行插入删除,但不能够进行随机访问 2..示例程序: #include "stdafx.h" #include <iostream> #include <list> #include <iterator> #include <algorithm> using namespace std; const int num[5] = {1,3,2,4,5}; boo
-
C++ STL入门教程(3) deque双向队列使用方法
一.简介 deque(Double Ended Queues,双向队列)和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样). 二.完整程序代码 /*请务必运行以下程序后对照阅读*/ #include <deque> #include <iostream> #include <algorithm> #include <stdexcept> using namespace std; void print(int num) { cout <&
随机推荐
- 基于jquery & json的省市区联动代码
- java arrayList遍历的四种方法及Java中ArrayList类的用法
- java实现哈夫曼压缩的实例
- mysql oracle和sqlserver分页查询实例解析
- python使用reportlab画图示例(含中文汉字)
- python安装cx_Oracle模块常见问题与解决方法
- js 用于检测类数组对象的函数方法
- 前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
- javascript实现的基于金山词霸网络翻译的代码
- JQuery实现Repeater无刷新批量删除(附后台asp.net源码)
- 在ASP.NET使用JavaScript显示信息提示窗口实现原理及代码
- PHP压缩html网页代码(清除空格,换行符,制表符,注释标记)
- Java 进制转换的方法
- Ubuntu中Opencv的安装使用教程
- 基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
- 分析Node.js connect ECONNREFUSED错误
- js内置对象 学习笔记
- Java中用Socket实现HTTP文件上传实例
- Java 多线程实例讲解(一)
- 深入理解Python中range和xrange的区别