推荐视频:

STL高级用法 vector stack queue deque set map

Vector

1.初始化

  • 数组初始化 int a[5] = {1,2,3,4,5}
  • vector初始化 vector A[10] = {1,2,3,4,5}
  • vector A(10, 1);

2.二维数组初始化赋值

  • vector<vector> f1(n, vector(m,0));

3.常用函数

  • 排序:sort(nums.begin(), nums.end());
  • 插入:nums.insert(nums.begin(), x);
  • 插入:nums.insert(nums.begin() + n , x);
  • 删除:nums.erase(nums.begin());
  • 返回元素个数:size()
  • 返回是否为空:empty()
  • 清空:clear()
  • 末尾添加/删除:push_back()/pop_back()
  • front()/back()
  • 返回开始和结束的迭代器:begin()/end()
  • []
  • 支持比较运算(>,<),按字典序
  • erase() (1) 输入是一个数x,删除所有x O(k + logn) k是x的个数
  • 去重 alls.erase(unique(alls.begin(), alls.end()), alls.end());
  • 查找 – vector中的find()

vector::iterator result = find(arr2.begin( ), arr2.end( ), arr1[i]);

if ( result == arr2.end( ) ) //如果没找见

4.遍历

  • for(vector::iterator i = a.begin(); i != a.end(); i++) cout << *i << endl;
  • for(auto i = a.begin(); i != a.end(); i++) cout << *i << endl;
  • for(auto x : a) cout << x << endl;

5.参数

  • int rows=triangle.size();//求得行数
  • int col=triangle[0].size();//求的列数

String

1.常用函数

  • 返回字符串长度:size()/length()
  • 插入:str.insert(str.begin(), ‘a’)
  • 返回子串:str.substr(起始坐标,(长度))
  • 字符串添加元素:str.push_back(‘a’)
  • 字符串删除末尾元素:str.pop_back(‘a’)
  • 删除元素 str.substr(0, str.length() - 1);
  • 删除元素 str.erase(str.end() - 1);
  • 返回字符串所在字符数组的起始地址: c_str()
  • 为空/清空 empty()/clear()

2.整型和字符串的相互转换

  • 整型转字符串
  • to_string(i)
  • 字符串转整型
  • int a=atoi(s.c_str());
  • int b=stoi(s);

set(没有重复元素)

  • set遍历
    set::iterator it;
    for(it=notAppearSet.begin ();it!=notAppearSet.end ();it++) cout << *it;

multiset(可以有重复元素)

map

  • map<int, int> loc;
  • map a[“yxc”] = 1
    获取键、值 for(auto x : f1) x.first,x.second
    查找:
    s.find() 查找一个元素,如果容器中不存在该元素,返回值等于s.end()

if(numSet.find(findNum)!=numSet.end()

代表找到了

set, map, multiset, multimap(基于平衡二叉树(红黑树),动态维护有序序列)

  • size()
  • empty()
  • clear()
  • begin()/end()
  • ++, – 返回前驱(前一个数)和后继(后一个数),时间复杂度 O(logn)
  • set/multiset
  • insert() 插入一个数
  • find() 查找一个数
  • count() 返回某一个数的个数
  • erase()

(1) 输入是一个数x,删除所有x O(k + logn)

(2) 输入一个迭代器,删除这个迭代器

  • lower_bound()/upper_bound()
    lower_bound(x) 返回大于等于x的最小的数的迭代器

upper_bound(x) 返回大于x的最小的数的迭代器

  • map/multimap

insert() 插入的数是一个pair

erase() 输入的参数是pair或者迭代器

find()

[] 注意multimap不支持此操作。 时间复杂度是 O(logn)

lower_bound()/upper_bound()

unordered_set,unordered_multiset,unordered_map,unordered_multimap

-和上面类似,增删改查的时间复杂度是 O(1)

-不支持 lower_bound()/upper_bound(), 迭代器的++,–

queue

  • 没有clear(), 清空:q = queue()
  • size()
  • empty()
  • push() 向队尾插入一个元素
  • front() 返回队头元素
  • back() 返回队尾元素
  • pop() 弹出队头元素

priority_queue

  • 没有clear()
  • size()
  • empty()
  • push() 插入一个元素
  • top() 返回堆顶元素
  • pop() 弹出堆顶元素
  • 大根堆插入-x就是小根堆
  • 定义成小根堆的方式:priority_queue<int, vector, greater> q;

deque(效率慢)

  • size()
  • empty()
  • push() 向队尾插入一个元素
  • front() 返回队头元素
  • back() 返回队尾元素
  • pop() 弹出队头元素

pair<int, int>

定义

  • pair底层是结构体
  • pair<int, string> 存储一个二元组
  • pair<int, pair<int, int>> 三元组
    赋值/初始化
  • p = make_pair(10, “yxc”)
  • p = {10, “yxc”}
    取到元素
  • p.first
  • p.second

stack

bitset

  • bitset<10000> s;
  • ~, &, |, ^
  • , <<
  • ==, !=
  • []
  • count() 返回有多少个1
  • any() 判断是否至少有一个1
  • none() 判断是否全为0
  • set() 把所有位置成1
  • set(k, v) 将第k位变成v
  • reset() 把所有位变成0
  • flip() 等价于~
  • flip(k) 把第k位取反

auto 自动推断类型

  • auto x = max_element(a.begin() + i, a.end());用的时候*x

以上不足的地方欢迎指出讨论,觉得不错的朋友,希望能得到您的点赞支持