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)删除向量中的元素,会调用元素类的析构函数。