STL(大量博客搜集整理,持续更新)
转:STL在ACM中的应用
STL 提供三种类型的组件:容器、迭代器和算法,它们都支持泛型程序设计标准。在ACM中充分利用STL可以大大的简化程序,提高解题效率。
1、容器主要有两类:顺序容器和关联容器。顺序容器(vector/list/deque/string)等是一系列元素的有序集合。关联容器(set/multiset/map/multimap)包含查找元素的键值。
2、迭代器的作用是遍历容器。
3、STL算法库包含四类算法:排序算法,不可变算法,变序算法和数值算法。
https://www.cnblogs.com/shanyr/p/5745807.html
mark 非常好的总结
1.函数模板
template<class T>
//template 是关键字,T 表示一种待实例化的类型
//template<typename T> 也是对的
//函数定义模板
//类 模板
//类 模板
#include<iostream>
using namespace std;
//定义名为ex_class的类模板
template < typename T> class ex_class
{
T value;
public:
ex_class(T v) { value=v; }
void set_value(T v) { value=v; }
T get_value(void) {return value;}
};
//main()函数中测试ex_class类模板
int main()
{
//测试int类型数据
ex_class <int> a(5),b(10);
cout<<"a.value:"<<a.get_value()<<endl;
cout<<"b.value:"<<b.get_value()<<endl;
//测试char类型数据
ex_class <char> ch('A');
cout<<"ch.value:"<<ch.get_value()<<endl;
ch.set_value('a');
cout<<"ch.value:"<<ch.get_value()<<endl;
//测试double类型数据
ex_class <double> x(5.5);
cout<<"x.value:"<<x.get_value()<<endl;
x.set_value(7.5);
cout<<"x.value:"<<x.get_value()<<endl;
}
很简便!!!!!!
2.stack 栈
成员函数介绍
1.empty() 堆栈为空则返回真
2.pop() 移除栈顶元素
3.push() 在栈顶增加元素
4.size() 返回栈中元素数目
5.top() 返回栈顶元素
3.vector
vector 基本操作
vector<int> v;
v.begin(); //容器的起始位置
v.end(); //容器最后一个位置后的位置
v.front();v.back(); //返回第一个元素(最后一个元素,但不判断时候存在
v.empty(); //返回是否容器为空
v.clear(); //清空容器
v.erase(m); //删除m位置的数据,并返回下一个数据的地址(m是迭代器)
v.erase(m,n); //删除m到n之间的数据,并返回下一个数据的地址
v2.assign(8,1); // 重新给vec2赋值,8个成员的初始值都为1 此操作之后vector变成新的size&value
v.push_back(element); //压入一个元素到末端
v.pop_back(); //弹出最后一个元素
v.reserve(100);v.resize(101); //resize已经创建空间如果再v.push_back()空间就会到101,而reserve只是预留空间并没有真正创建,v.push_back() 只是在第1位
v.size();v.capacity(); //size表示的是已经创建的空间大小也可以表示元素个数可用v[]的形式直接访问,
capacity容器容量,是预留空间并没有实际创建
swap(a,b); //交换两个元素的位置如:swap(v[0],v[1]);
vector<int> v(10); //创建一个前十个元素为int的容器
vector<string> v(10,string("I")); //使容器的前10个元素都为string型,并且都初始化为I
vector<string> v1(v2); //对于已经存在的v2创建一个v1副本 //这操作可以啊
v.insert(place,element); v.insert(place,n,element); //在place(迭代器)位插入n个元素
//注:对vector元素的访问可以用类似c语言的v[],但是最好用v.at(),它会检查是否越界更安全
v[0]; // A
v.at[0]; // B 这样越界的时候比较安全
这样搞下去会很慢的。。。。
不总结不总结了 看这篇就很好
队列补充:https://blog.****.net/c20182030/article/details/70171231
优先队列 :https://blog.****.net/c20182030/article/details/70757660
less是从大到小,greater是从小到大!!!!
回头把最近做的stl的题总结了才是硬道理。。。。。。。