STL

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或为初始化的指针
//利用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;  
}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值