C++ STL初识

可以说是为了追求可复用性,产生了STL。

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。

它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具

革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程

序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft

Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的

VCL(Visual Component Library)。

 

STL和C++标准函数库

STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库的大约80%的分量。而作为
在实现STL过程中扮演关键角色的模板则充斥了几乎整个C++标准函数库。在这里,我们有必要看一看
C++标准函数库里包含了哪些内容,其中又有哪些是属于标准模板库(即STL)的。
C++标准函数库为C++程序员们提供了一个可扩展的基础性框架。我们从中可以获得极大的便利,同时
也可以通过继承现有类,自己编制符合接口规范的容器、算法、迭代子等方式对之进行扩展。

下面看一段STL编写的输入-排序-输出代码:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

void main(void)

{

vector<int> num; // STL中的vector容器

int element;

// 从标准输入设备读入整数,

// 直到输入的是非整型数据为止

while (cin >> element)

num.push_back(element);

// STL中的排序算法

sort(num.begin(), num.end());

// 将排序结果输出到标准输出设备

for (int i = 0; i < num.size(); i ++)
cout << num[i] << "/n";
}
全部用STL的代码:
#include
#include
#include
#include
<iostream>
<vector>
<algorithm>
<iterator>
using namespace std;
void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;
// STL中的vector容器
int_vector num;
// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
copy(istream_itr(cin), istream_itr(), back_ins_itr(num));
// STL中的排序算法
sort(num.begin(), num.end());
// 将排序结果输出到标准输出设备
copy(num.begin(), num.end(), ostream_itr(cout, "/n"));
}
在这个程序里几乎每行代码都是和STL有关的(除了main和那对花括号,当然还有注释),并且它包含了
STL中几乎所有的各大部件(容器 container,迭代器iterator, 算法algorithm, 适配器adaptor),唯
一的遗憾是少了函数对象(functor)的身影。

容器(container):

//
容器一词听上去很高深,其实说白了也是类似于对象的东西,但又和对象有点区别。
迭代器(iterator): 指针
//
这个名词就更玄了,其实就是类似于指针的东西。

内部实现: 数组 // 就是没有固定大小的数组,vector直接翻译是向量的意思
vector
// T
就是数据类型,Alloc是关于内存的一个什么东西,RoBa没有仔细讲,一般是使用默认参数。
支持操作:
begin(), //
取首个元素,返回一个iterator
end(), //
取末尾(最后一个元素的下一个存储空间的地址)
size(), //
就是数组大小的意思
clear(), //
清空
empty(), //
判断vector是否为空
[ ]  //
很神奇的东东,可以和数组一样操作
//
举例: vector a;   //定义了一个vector
//
然后我们就可以用a[i]来直接访问a中的第i + 1个元素!和数组的下标一模一样!
push_back(), pop_back() //
从末尾插入或弹出
insert() O(N)  //
插入元素,O(n)的复杂度
erase() O(N)  //
删除某个元素,O(n)的复杂度
可以用于数组大小不定且空间紧张的情况

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值