STL简单讲解
// 队列的使用
#include < queue >
// 在BFS中会使用到队列
// 优先队列
priority_queue < 元素类型 > Q;
Q.push(); // 压入元素
Q.pop; // 弹出
Q.front(); // 取顶元素
Q.empty(); // 判断是否为空
// 优先队列中默认的是大的先出
// 若要使小的先出,则可在元素类型struct中重载 “<”
struct node{
friend bool operator < (node n1, node n2)
{
return n1.Step > n2.Step;
// 小的先出
}
int Step;
};
// 优先队列 取顶时应使用 Q.top();
// 链表的使用
#include < list >
list < int > lis;
list < int > ::iterator iter; // 跌代器 (指针)
list.push_back(); // 在链表尾插入元素
// 操作表中的每个元素时,必须要使用指针
// *iter 即为 iter 所指的元素的值
for (iter = lis.begin(); iter != lis.end(); iter ++ )
{
iter = lis.erase(iter);
// 删除表中一位置的元素
// 若删除指定位置,第 i 个,可用 i 记数
}
// lis.insert() 插入在当前指针所指的元素之前
// 容器 vector 的使用
#include < vector >
vector < int > v;
v.push_back(); // 在尾部插入元素
v.size(); // 返回容器的大小
v.clear(); // 清除容器的元素
v.resize(); // 分配表的大小
// 若使用vector 来表示二维,则可
vector < vector < int > > v(n);
// 或者
vector < vector < int > > v;
v.resize(n);
// 可以表示有 n 行的二维数组
// 对于每一维 , v[i] 的操作与 v 一致
// 传 vector 的使用
void pp(vector < vector < int > > & vv)
{
// 传vector 的函数使用
int i ,j;
for (i = 0 ; i < vv.size(); i ++ )
{
for (j = 0 ; j < vv[i].size(); j ++ )
printf( " %d " ,vv[i][j]);
printf( " \n " );
}
}
void main()
{
int i,j;
vector < vector < int > > a( 10 );
for (i = 0 ; i < 10 ; i ++ )
for (j = 0 ; j < i;j ++ )
a[i].push_back(j);
pp(a);
// 调用函数
}
// C++ 自带的排序 sort
#include < algorithm >
// 头文件
bool cmp( int a, int b){
return a > b;
} // 使得降序排列
// 默认为升序 sort(a,a + n);
sort(A, A + n,cmp);
// 也可对结构体排序,比较函数自己实现
// 要对容器中的元素排序
// 可使用跌代器
// 把容器中起始与结束的指针传给 sort
// example
vector < int > v;
vector < int > ::iterator it1;
vector < int > ::iterator it2;
it1 = v.begin();
it2 = v.end();
sort(it1, it2 ,cmp);
// string
// 使用起来相对比较多 , 主要在处理字符串的时候
#include < string >
string s1 , s2 , s3;
// string 类的赋值
// 即可以 相互之间,也可以把字符串直接赋给 string 类
// example
char ss[] = “abcd”;
s1 = “”; // string 类初始为空
s1 = ss ; // 把字符串直接赋给string
s2 = s1; // sgring 之间赋值
// string 类可以直接使用 + 来进行字符串的拼接
s1 = “ab”;
s2 = “cd”;
s3 = s1 + s2;
// 操作的结果 s3 == “abcd”;
// 常用的函数
s1.size(); // 字符串的大小,既长度
// 对于已经赋值的字符串,可以直接对下表进行操作
// 可以使用查找函数
s1.find(s2) ; // 在s1 中查找 s2 ,如果存在,返回起始下表,否则返回 -1
s1.substr(起始位置,长度); // 取子串