什么是STL

来源:互联网 发布:java求100的阶乘循环 编辑:程序博客网 时间:2024/05/13 12:28

Standard Template Library

编译器:C/C++  -> 机器码

连接器:o -> 可执行程序/库

运行库:标准C库(libc.a),标准C++库,标准模板库,数学,网络,...

1.十大容器

1)向量(vector):支持下标访问,高效地在尾部增删数据。

2)列表(list):在任意位置做插入删除,效率都很高,不支持下标访问

3)双端队列(deque):支持下标访问,可在两端增删数据

以上三种称为线性容器;

4)堆栈(stack):只能在一端压入弹出数据。

5)队列(queue):后端压入前端弹出。

6)优先队列(priority_queue): 提取当前优先级最高的数据

以上3种称为适配器容器;


7)映射(map):key-value对的组合,一对一的组合,高效的根据key提取vlaue.

8)多重映射(multimap):允许key重复的映射。

9)集合(set):没有value的映射

10)多重集合(multiset):没有value的多重映射。

以上4中称为关联容器。




二.向量

特点:

连续的内存与下标访问

动态内存管理

预分配内存以提高效率

随机插入删除


定义变量:

#include<vector>

vector<int> vn;

vector<string> vs;


迭代器:

vector<int> ::iterator it;

it = vn.begin();  //起始迭代器,指向第一个元素

it = vn.end(); //终止迭代器,指向最后一个元素的下一个位置

for(vector<int>::iterator it = vn.begin();it != vn.end();it++)

cout <<*it  << endl;

cout << endl;

1)通过*号访问迭代器所指向的数据元素

2)可以向指针一样通过“++”和“--”运算从一个元素移动到另一个元素


push_back()/pop_back():在向量的尾部增加、删除一个元素


随机访问

1)通过迭代器

vector<int> vn;

vn.push_back(10); //10

vn.push_back(20); //10,20

vn.push_back(30); //10,20,30

vector<int> ::iterator it = vn.begin();

it++;

*it = 15;

*(it+1)++; //10 15 31

2)通过下标运算符

vn[0]++;  //11 15 31

vn[2]--;  // 11 15 30

3)size():获取向量中的元素个数




向量元素的预分配与初始化

vector<int>  vn(100);    //vn初始化为100个int,其值为0

vector<student> vs(100);  //vs初始化为100个student对象,每个对象以无参方式初始化

vector<int>  vn(100,2);  //vn初始大小100,其值为2.

vector<student> vs(100,student("张飞",29));


front() / back():获取首尾元素。

begin() / end() :获取起始迭代器

size() / resize() / capacity() / reserve()

size:返回向量大小,元素个数

resize:改变向量大小,如果元素为类类型的对象,则会引发析构和构造

 capacity:返回向量的容量,即最多可容纳元素的个数。
reserve:扩大向量的容量。   
insert() / erase():插入和删除
find() / sort():查找和排序


6)通过sort函数排序:
A.两参版本需要元素类提供“<”运算符。
B.三参版本需要提供比较器函数对象。
7)删除向量中的元素,会调用元素类的析构函数。








1 0