飞道的博客

C++ STL笔记总结

414人阅读  评论(0)

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)

### queue
queue<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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场