vector的常见用法详解
#include <vector>
using namespace std;
vector<int> a;
vector<vector<int> > b;
.[index]
.begin()/.end()
::iterator
push_back/pop_back
size/clear/insert/erase删除一个或一个区间
set的常见用法
#include <set>
using namespace std;
set<int> a;
::iterator
.insert/.begin/.end/.find/.erase删除一个用位置,用键值,删除区间/.size/.clear
set内元素自动排序且去除重复元素
string常见用法
#include <string>
using namespace std;
string str = "abc";
.length/.[index]/
要读入和输出整个字符串,只能用cin和cout
#include <iostream>
#include <string>
using namespace std;
string str;
cin >> str;
cout << str;
.c_str()/::iterator/operator+=/==/!=/</<=/>/>=/length()/size()/insert/erase/clear/substr/string::npos[作为find函数失败时返回值]/find/replace
科学计数法
0.a1a2... x 10^e
map常用用法详解
#include <map>
using namespace std;
map的定义
map<typename1, typename2> mp;
map容器内元素的访问
通过下标访问,通过迭代器访问
- 通过下标访问
- 通过迭代器访问
map<typename1, typename2>::iterator it
it->first来访问键
it->second来访问值
map常用函数实例解析
find/erase/size/clear
map的常见用途
一个键多个值下用multima/
queue
queue的定义
#include <queue>
using namespace std;
queue<typename> name;
queue内元素访问
front/back/push/pop/empty/size
priority_queue
在有限队列中,队首元素是队列中优先级最高的那一个.
priority_queue的定义
#include <queue>
using namespace std;
priority_queue<typename> name;
priority_queue容器内元素的访问
top/push/pop/empty/size
priority_queue内元素优先级的设置
以下介绍基本数据类型与结构体类型的优先级设置方法
- 基本数据类型的优先级设置
数字大的优先级大
构造时,可选参数2表示承载底层数据结构堆的容器
可选参数3,是对参数1的比较类
如希望数字小的优先级大
priority_queue<int, vector<int>, greaterr<int> > q;
- 结构体的优先级设置
例子
struct fruit
{
string name;
int price;
};
// 现希望水果价格低的为优先级高
struct fruit
{
string name;
int price;
friend bool operator<(fruit f1, fruit f2)
{
return f1.price > f2.price;
}
};
priority_queue<fruit> q;
// 另一种等价表示方法
struct cmp
{
bool operator()(fruit f1, fruit f2)
{
return f1.price > f2.price;
}
};
priority_queue<fruit, vector<fruit>, cmp> q;
待比较对象较大时,可用const &修饰比较形参
stack常见用法详解
stack的定义
#include <stack>
using namespace std;
stack<typename> name;
stack容器内元素的访问
top/push/pop/empty/size
pair的常见用法详解
pair的定义
#include <utility>
using namespace std;
pair<typename1, typename2> name;
- 如果想在代码中临时构建一个pair,有如下两种方法
方法1
pair<string, int>("haha", 5)
方法2
make_pair("haha", 5)
pair中元素的访问
类似于
struct pair
{
typename1 first;
typename2 second;
}
pair常用函数解析
两个pair类型数据可直接用==/!=/</<=/>/>=比较
比较规则:
先以first大小作为标准
相等时,继续比较second
pair常见用途
map的insert需要pair
algorithm头文件下的常用函数
using namespace std;
max/min/abs/fabs[位于math头文件]
swap(x,y)交换x和y的值
reverse(its, ite)
将[its, ite)之间元素反转
next_permutation()
给出一个序列在全排列中的下一个序列
next_permutation在已经达到全排列的最后一个时会返回false
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
int a[10] = {1,2,3};
do
{
printf("%d%d%d
", a[0], a[1], a[2]);
}
while(next_permutation(a, a+3));
return 0;
}
fill
可把数组或容器中的某一段区间赋为某个相同的值
sort
如何使用sort
#include <algorithm>
using namespace std;
sort(首元素地址,尾后元素地址,可选的比较函数);
默认对区间进行递增排序
如何实现比较函数cmp
介绍对基本数据类型,结构体类型,STL容器进行自定义排序规则时cmp的写法
#include <stdio.h>
#include <algorithm>
using namespace std;
// 按递减排序
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
int a[] = {3, 1, 4, 2};
sort(a, a+4, cmp);
}
结构体数组的排序
#include <stdio.h>
#include <algorithm>
using namespace std;
struct node
{
int x, y;
}ssd[10];
bool cmp(node a, node b)
{
return a.x > b.x;
}
int main()
{
ssd[0].x = 2;
ssd[0].y = 2;
ssd[1].x = 1;
ssd[1].y = 3;
ssd[2].x = 3;
ssd[2].y = 1;
sort(ssd, ssd+3, cmp);
}
容器的排序
在STL标准容器中,只有vector/string/deque可使用sort
#include <iostream>
#incude <string>
#include <algorithm>
using namespace std;
bool cmp(string str1, string str2)
{
return str1.length() < str2.length();
}
int main()
{
string str[] = {"bbbb", "cc", "aaa"};
sort(str, str+3, cmp);
}
lower_bound/upper_bound
lower_bound和upper_bound需用在一个有序数组或容器中
lower_bound(first, last, val)来寻找在数组或容器的[first, last)范围内第一个值大于等于val的元素的位置,如是数组,返回该位置的指针.如是容器,返回该位置的迭代器.
upper_bound(first, last, val)来寻找在数组或容器的[first, last)范围内第一个值大于val的元素的位置.如是数组,返回该位置的指针,如是容器,返回该位置的迭代器.