STL学习系列之一——标准模板库STL介绍
库是一系列程序组件的集合,他们可以在不同的程序中重复使用。C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出、数学计算等功能。
1. STL介绍
标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下
本文将介绍STL并探讨它的三个主要概念:容器、迭代器、算法。
STL的最大特点就是:
数据结构和算法的分离,非面向对象本质。访问对象是通过象指针一样的迭代器实现的;
容器是象链表,矢量之类的数据结构,并按模板方式提供;
算法是函数模板,用于操作容器中的数据。由于STL以模板为基础,所以能用于任何数据类型和结构。
容器可以分为三种主要类型:序列容器、关联容器、容器适配器。
每种STL容器都具有相关联的成员函数,这些成员函数的一个子集在所有的STL容器中都定义了。
STL迭代器的属性和指针类似,程序可以利用迭代器操作STL容器中的元素
STL算法是用于执行常见数据操作的函数,这些操作包括搜索、排序和比较元素,STL提供了大约70种算法,其中大多数算法都使用迭代器来访问容器元素。
1.1 容器简介
容器可以分为三种:序列容器、关联容器、容器适配器。
序列容器:vector deque list
Vector:可从后端执行快速的插入和删除,直接访问任何元素
Deque:从前面或后面执行快速的插入和删除,直接访问任何元素
List:双链表,能在任何地方执行快速的插入和删除
关联容器:set multiset map multimap
Set:执行快速搜索,元素不允许重复
Multiset:执行快速搜索,元素允许重复
Map:一对一映射,元素不允许重复,快速的基于键的搜索
Multimap:一对多映射,元素允许重复,快速的基于键的搜索
容器适配器:stack queue priority_queue
Stack:后进先出
Queue:先进先出
priority_queue:优先级最高的元素总是最先出队
序列容器表示线性数据结构,例如向量和链表;
关联容器是非线性容器,通常能够快速找出保存在容器中的元素。这类容器能够保存值的集合或键/值对;序列容器和关联容器统称为第一类容器。
STL将堆栈和队列实现为容器适配器,使程序以一种受约束的方式看待序列容器。
STL通常可通过模板实现泛型编程,以避免继承和虚函数,获得更好的执行时性能。
1.2 迭代器简介
迭代器在许多方面和指针相同,用于指向第一类容器的元素。
迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。迭代器就如同一个指针。事实上,C++的指针也是一种迭代器。但是,迭代器不仅仅是指针,因此你不能认为他们一定具有地址值。例如,一个数组索引,也可以认为是一种迭代器。
迭代器有各种不同的创建方法。程序可能把迭代器作为一个变量创建。一个STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,++操作符用来递增迭代器,以访问容器中的下一个对象。如果迭代器到达了容器中的最后一个元素的后面,则迭代器变成past-the-end值。使用一个past-the-end值得指针来访问对象是非法的,就好像使用NULL或为初始化的指针一样。
废话不多说,直接上demo
- //利用istream_iterator进行输入,利用ostream_iterator进行输出
- //下面程序演示了使用istream_iterator从标准输入进行输入,以及使用ostream_iterator输出到标准输出
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- #include <iterator>
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout<<"输入2个整数:"<<endl;
- //下行创建了一个istream_iterator,它能够以一种类型安全的方式从标准输入对象cin提取int值
- std::istream_iterator<int> inputInt(cin);
- //下行对迭代器inputInt解除引用,并从cin中读出一个整数,然后将它赋予number1
- int number1=*inputInt;
- ++inputInt; //将迭代器inputInt定位到输出流中的下一个值
- int number2=*inputInt; //从inputInt输入下一个整数,并将它赋予number2
- //下行创建了一个ostream_iterator,它能够在标准输出对象cout中出入int值
- std::ostream_iterator<int> outputInt(cout);
- cout<<"和是:"<<endl;
- *outputInt=number1+number2; //将number1和number2的和赋予*outputInt
- cout<<endl;
- system("pause");
- return 0;
- }
1.3 算法简介
STL算法能用于各种容器。STL提供的许多算法,大量用于操作容器,插入、删除、搜索、排序以及其他算法,都适合于部分或者所有的STL容器。
STL的实现非常简单。到目前为止,类的设计者都将算法作为容器的成员函数,使算法和容器相关联。STL采用不同的方法,STL的算法和容器是分离的,它只是间接地通过迭代器操作容器的元素。
STL算法能够用于STL容器以及基于指针的、C风格的数组。
STL学习系列之一——标准模板库STL介绍的更多相关文章
- STL学习一:标准模板库理论基础
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间. STL的从广 ...
- 标准模板库(STL)学习探究之stack
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string
- 标准模板库(STL)学习探究之vector容器
标准模板库(STL)学习探究之vector容器 C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被 ...
- C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动 ...
- C++的标准模板库STL中实现的数据结构之链表std::list的分析与使用
摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解,即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第二篇.主要针对线性表中的链表 ST ...
- C++ 标准模板库(STL)
C++ 标准模板库(STL)C++ STL (Standard Template Library标准模板库) 是通用类模板和算法的集合,它提供给程序员一些标准的数据结构的实现如 queues(队列), ...
- 标准模板库--STL
标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic progra ...
- 实验8 标准模板库STL
一.实验目的与要求: 了解标准模板库STL中的容器.迭代器.函数对象和算法等基本概念. 掌握STL,并能应用STL解决实际问题. 二.实验过程: 完成实验8标准模板库STL中练习题,见:http:// ...
- C++ 标准模板库STL 队列 queue 使用方法与应用介绍
C++ 标准模板库STL 队列 queue 使用方法与应用介绍 queue queue模板类的定义在<queue>头文件中. 与stack模板类很相似,queue模板类也需要两个模板参数, ...
随机推荐
- WPF ListBox 获取listBoxItem
1.已知item的DataContext,获取ListBoxItem 1)ItemContainerGenerator.ContainerFromItem var selectedItem = Doc ...
- centos 7 x64 搭建 elasticsearch 服务
1.确认服务是否已经安装java 8 环境 使用 java -version 查看 2.在java 官网下载安装包,然后上传到服务器响应的文件中 3.使用 tar -zxvf 文件夹 解压到响应的文件 ...
- Check the string CodeForces - 960A
A has a string consisting of some number of lowercase English letters 'a'. He gives it to his friend ...
- Node.js HTTP
稳定性: 3 - 稳定 使用 HTTP 服务器或客户端功能必须调用 require('http'). Node 里的 HTTP 接口支持协议里原本比较难用的特性.特别是很大的或块编码的消息.这些接口不 ...
- 用python爬了自己的微信,原来好友都是这样的!
偶然了解到Python里的itchat包,它已经完成了wechat的个人账号API接口,使爬取个人微信信息更加方便.鉴于自己很早之前就想知道诸如自己微信好友性别比例都来自哪个城市之类的问题,于是乎玩心 ...
- Python 字符串字典内置函数&方法
Python字典包含了以下内置函数: 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dict)计算字典元素个数,即键的总数. 3 str(dict)输出字典可 ...
- 安卓高级2 Volley框架的使用案例
初始化类: MyApp.java package qianfeng.com.day37_volley_pull.app; import android.app.Application; import ...
- DrawerLayout案例
布局文件: <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget ...
- 自定义View实现五子棋游戏
成功的路上一点也不拥挤,因为坚持的人太少了. ---简书上看到的一句话 未来请假三天顺带加上十一回家结婚,不得不说真是太坑了,去年婚假还有10天,今年一下子缩水到了3天,只能赶着十一办事了. 最近还在 ...
- Zookeeper的安装配置及基本开发
一.简介 Zookeeper 是分布式服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理等等. ZooKeeper的目标就 ...