C++STL库
Standard Template Library
顾名思义,STL为C++提供很多现成的模版,包含算法(algorithm)、容器(containers)、函数(functions)、迭代器(iterators)
vector
数组或者链表、
遍历、
迭代器(指针)iterator
vector<int > list;
vector<int > ::iterator p1; //定义一个叫p1的迭代器
for(p1 = list.begin(); p1 != list.end(); p1++){
cout << *p1 << endl;
}
//常见操作
list.size(); //数组元素个数
list.clear(); //清空数组
list.empty(); //数组是否为空
list.begin(); //数组的首元素迭代器
list.end(); //数组最后一个元素的下一个元素的迭代器,该元素实际在数组中不存在
list.erase(p1); //删除数组某个迭代器所在位置的数字
list.push_back(1); // 往数组后面添加元素1
list.pop_back(); //删除数组最后一个元素
list[index] //获取list中下标为index的元素
string
字符串string可看成一个特殊的vector
string str = "hello";
str.length(); str.size();
str.insert(1,"aaa");//在下标为1处插入字符(串)
str.insert(str.begin(), 'a');//在迭代器处插入一个字符(串)
str.c_str(); //返回c语言字符串,用于printf
str.append(str2); //把str2拼接到str后面
str.compare(str2); //strcmp(str, str2)
str == str2; //strcmp(str, str2) == 0;
str += str2; // str.append(str2);
str += 'a'; //str.push_back('a';)
getline(cin, str); //读取一整行, gets
str.substr(int idx, int len); //获取字串
//idx: 字串开始位置(从0开始)
//len: 字串的长度
### algorithm 算法
sort //快速排序
int arr[] {2,3,1,5,4};
int n = 5;
//参数
//排序开始指针
//排序结束指针(最后一个元素的下一个元素的指针)
//复杂度O(nlogn)
sout(arr, arr + n);
for(int i = 0;i < n; i++){
// 1 2 3 4 5
printf("%d ",arr[i]);
}
vector<int > arr;
arr.push_back(2);
arr.push_back(3);
arr.push_back(1);
sout(arr.begin(), arr.end());
// 1 2 3
for(int i = 0; i < arr.size(); i++){
printf("%d\n", arr[i]);
}
for(vector<int >::iterator it = arr.begin(); it != arr.end; it++){
printf("%d\n",*it);
}
//自定义比较函数
bool comInt(int a, int b){
return a > b;
}
vector<int > arr;
arr.push_back(2);
arr.push_back(3);
arr.push_back(1);
sort(arr.begin(), arr.end(), cmpInt);
sort(first,last,compare)
lower_bound(first,last,value)
upper_bound(first,last,value)
next_permutation(first,last)
unique(first,last)
### queuequeue<int > que;
que.push(1);
int frontElement = que.front();
que.pop();
que.empty();
que.size();
que.front();
que.back();
priority_queue<int > que2;//优先队列
que2.push(1);
int minElement = que2.top();
que2.pop();
que2.size();
que2.empty();
### stack ```c++ stack sta; sta.push(1); int topElement = sta.top(); sta.pop(); sta.empty(); sta.size(); ``` ### set set是按照特定顺序存储元素的容器
set中所有元素只能出现一次
由于set中所有元素是有序的,所以存储的元素必须已经定义过<运算符,所以要想在set里面放结构体,必须在结构体内重载<
具有支持多个相同元素共存的multiset
set<int > st;// 集合
st.insert(1);
st.find(item) //在st中查找item并返回其iterator(迭代器),找不到的话返回st.end()
st.clear();
st.erase(1);
st.size();
st.count(item);//因为集合中的元素不能重复,因此只能返回0或1
multiset<int > mst; //多重集
mst.insert(1);
mst.insert(1);
mst.count(1);// 2
/
map
mp.size():获取元素个数O(1)
mp.empty():判断是否为空O(1)
mp.clear():清空mp O(1)
mp.find(key):在map中查找key并返回其iterator,找不到的话返回mp.end() O(logn)
mp.count(key):在map中找key的数量,由于每个key都是唯一的,只会返回0或1
mp[key] 可以直接访问到键值队key---value中的value,如果不存在这样的键值对,那么mp[key]返回的是value类型默认构造器所构造的值,并将该键值对插入到map中
mp[key]=tmp:可以把键值对key---value中的value赋值为tmp,如果没有对应的键值对,则将该键值对插入到map中
mp.insert(make_pair(key,value)):在mp中插入键值对key----value。
一般不这样用,想要插入键值对的话直接使用mp[key]=value即可,map已经对[]运算符重载过了.
it->first:表示迭代器指向的键值对的key值
it->second:表示迭代器指向的键值对的value值
pair<int , int > origin;
origin = make_pair(0 , 0);
origin.first == origin.second;
origin.swap; //返回swap的新pair
Pair<string, int > id;
id = make_pair("somebody", 110);
pair<string, int > id;
id = make_pair("somebody", 110);
map<string, int > studentHeight;
studentHeight["小明"] == 170;
studentHeight["小红"] == 150;
studentHeight.insert(id);
studentHeight.erase("小明");
位集合
bitset
### functional 复数类 ### complex另外
<unordered_map>
<unordered_set>
附:C标准库常用函数
strlen(); //字符串长度
strcmp(); //字符串比较
strcpy(); //拷贝
memset(); //暴力清空
memcpy(); //暴力拷贝
有关数学方面的函数,如指数函数,浮点取整函数,以及三角函数
qsort();//快排
rand();//随机数
malloc();//动态分配内存
free();//释放内存
time(0);//从1970年到现在的秒数,常用于生成随机数
clock();//程序启动到目前位置的毫秒数
isdigit();//判断字符是否为数字
isalpha();//判断字符是否为大小写字母
以上头文件都不需要记忆,只要以下就能包含所有头文件
#include <bits/stdc++.h>
转载:https://blog.csdn.net/qq_45013991/article/details/105720585