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

[cpp] view
plain
copy

  1. //利用istream_iterator进行输入,利用ostream_iterator进行输出  
  2. //下面程序演示了使用istream_iterator从标准输入进行输入,以及使用ostream_iterator输出到标准输出  
  3. #include "stdafx.h"  
  4. #include <iostream>  
  5. using namespace std;  
  6.   
  7. #include <iterator>  
  8.   
  9. int _tmain(int argc, _TCHAR* argv[])  
  10. {  
  11.  cout<<"输入2个整数:"<<endl;  
  12.  //下行创建了一个istream_iterator,它能够以一种类型安全的方式从标准输入对象cin提取int值  
  13.  std::istream_iterator<int> inputInt(cin);  
  14.   
  15.  //下行对迭代器inputInt解除引用,并从cin中读出一个整数,然后将它赋予number1  
  16.  int number1=*inputInt;  
  17.  ++inputInt;                    //将迭代器inputInt定位到输出流中的下一个值  
  18.  int number2=*inputInt;         //从inputInt输入下一个整数,并将它赋予number2  
  19.   
  20.  //下行创建了一个ostream_iterator,它能够在标准输出对象cout中出入int值  
  21.  std::ostream_iterator<int> outputInt(cout);  
  22.  cout<<"和是:"<<endl;  
  23.  *outputInt=number1+number2; //将number1和number2的和赋予*outputInt  
  24.  cout<<endl;  
  25.  system("pause");  
  26.  return 0;  
  27. }  

 

 

1.3   算法简介

STL算法能用于各种容器。STL提供的许多算法,大量用于操作容器,插入、删除、搜索、排序以及其他算法,都适合于部分或者所有的STL容器。

STL的实现非常简单。到目前为止,类的设计者都将算法作为容器的成员函数,使算法和容器相关联。STL采用不同的方法,STL的算法和容器是分离的,它只是间接地通过迭代器操作容器的元素。

STL算法能够用于STL容器以及基于指针的、C风格的数组。

 

参考资料:c++程序员教程  电子工业出版社

时间: 2024-08-04 10:54:31

STL学习系列之一——标准模板库STL介绍的相关文章

STL学习系列之二:标准模板库(STL)介绍

此文为转贴文章,由于原文运行在Linux下,我在vc6/7下进行调试,作了部分修改!注意:所有的代码在vc6/vc7下调试通过!标准模板库(STL)介绍 标准模板库(STL)介绍 0 前言. 1 定义一个list 2 使用list的成员函数push_back和push_front插入一个元素到list中 3 list的成员函数empty() 4 用for循环来处理list中的元素 5 用STL的通用算法for_each来处理list中的元素 6 用STL的通用算法count_if()来统计lis

用标准模板库STL实现文件比较

要阅读本文,你要熟悉C++,熟悉类模板和函数模板.本文汇集了大量有关的信息,指引你逐步阅读. 本文用提问,设计和解决方案引导阅读.希望你能喜欢. 问题提出: 有二篇文章都含有许多行文字.我们要建立一个程序来找出二者之间的不同之处并将这些不同内容的行显示出来.程序必须做成可重复使用的组件,就是说,这个组件能够未经修改地被其他程序使用. 设计: 假设这二个文件非常之大(每个文件都有数千行),我们这样设计有关解决方案: 将各个文件读进内存块, 在内存块中进行文件内容比较, 将不同之处放进一个新的第三个

【C/C++学院】(12)C++标准模板库STL

1.简介          STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器).  2.vector向量 #include "iostream" #include "vector" using namespace std; //== != [] = //(vector<int>模板类型 void printfArray(vector<int> &v) { int size

C++标准库和标准模板库

C++强大的功能来源于其丰富的类库及库函数资源.C++标准库的内容总共在50个标准头文件中定义.在C++开发中,要尽可能地利用标准库完成.这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费时间.人力重新开发呢:(2)质量:标准库的都是经过严格测试的,正确性有保证:(3)效率:关于人的效率已经体现在成本中了,关于代码的执行效率要相信实现标准库的大牛们的水平:(4)良好的编程风格:采用行业中普遍的做法进行开发. 在C++程序设计课程中,尤其是作为第一门程序设计课程,我们注重了语法.语言的

STL学习系列之四:STL学习小结

提供了类型安全.高效而易用特性的STL无疑是最值得C++程序员骄傲的部分.每一个C++程序员都应该好好学习STL:). STL(Standard Template Library 标准模板库)是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的:一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,一个原因了,C++中已经有了模板.在后来,STL又被添加进了C++库.1996年,惠普公司又免费公开了STL,为

C++标准模板库与数据结构的学习

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中极具革命性的一部分.该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法.为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性. 体验STL中的list STL中提供的list类,是一个双向循环链表类.从每一个元素(节点),都可以访问前面一个元素

入门教程:JSP标准模板库(上)

js|标准|教程|模板|入门教程 简介JSP标准模板库(JSTL)是SUN公司发布的一个针对JSP开发的新组件.JSTL允许你使用标签(tags)来进行JSP页面开发,而不是使用多数JSP程序员已经习惯了的scriptlet代码方式开发.JSTL几乎能够做到传统JSP scriptlet代码能做的任何事情.你可能会疑惑,为什么我们需要另一种这样的HTML生成语言呢? STL允许JSP程序员使用tags而不是JAVA代码来编程.为了展示为什么这个是更优越的,下面将给出示例.我们会检查一个非常简单的

标准模板库介绍

标准模板库,也叫 STL,是一个 C++ 容器类库,算法和迭代器.他提供许多 基本算法,数据结构.STL 是一个通用库,即可以充份定制:几乎所有的 STL 组件都是模板.在你使用 STL 前,你必须了解模板的工作情况. 容器和算法 和许多类库一样,STL 包含容器类 - 可以包含其他对象的类.STL 包含向量 类,链表类,双向队列类,集合类,图类,等等.他们中的每个类都是模板,能包含 各种类型的对象.例如,你可以用 vector<int> ,就象常规的 C 语 言中的数组,除了 vector

STL学习系列之三:操作list容器

学习完了STL系列之二,自己写了个程序练手!程序采用的还是系列之二文章的架构.学习了STL之一和之二,对于STL的基本原理算有个个基本的了解.其实关于这几种容器,以前也都接触过,不过是在java上,当时学习时也是囫囵吞枣!现在感觉那真是学习之大忌,还是一步一个脚印为好.速度可以放慢点,那要扎实! 注意:程序在vc6下调试通过,对于不清楚如何在vc下运行STL者,可以读STL系列之一. //TjuAiLab //Author:zhangbufeng //Time:2005.8.23 22:00 #