STL 问题归纳

10 篇文章 0 订阅

Vector:

  1. 特点:变长数组,一般在元素个数不确定的情况下使用
  2. 添加头文件 #include <vector>, 以及 using namespace std;
  3. 定义:vector<typename> name; 相当于一位数组 name[SIZE], 只不过其长度可以根据需要进行变化,比较节省空间,“变长数组”
  4. vector 数组定义:vector<typrname> Arrayname[arraysize], 即 Arrayname[] 中的每一个元素都是一个 vector, Arrayname[0] ~ Arrayname[arraysize - 1] 中每一个都是一个 vector容器,相当于一个二维数组, 例如vector<int> vi[100];
  5. 访问:①通过下标访问 vi[0], vi[1]... ② 通过迭代器访问 vector::iterator it = it.begin() ,可以使用 *it 访问元素,vi[i] 与 *(vi.begin()+i)
  6. push_back(), 在 vector 之后添加一个元素 x
  7. pop_back(): 删除vector尾部的元素
  8. size() , 获取 vector 中元素个数
  9. clear(), 清除vector中的元素
  10. insert(it, x), 向vector的任意迭代器it处插入一个元素x
  11. erase(it), 删除迭代器处元素, erase(first, end) 删除[first, end) 内的所有元素 

Set:

  1. 特点:自动去重,升序排序
  2. 添加 #include <set> 以及 using namespace std;
  3. 定义:set<typename> name;
  4. set 数组的定义和 vector 相同: set<typename> Arrayname[arraysize], 比如 set<int> a[100];
  5. set 中元素的访问只能通过迭代器来访问 set<typename>::iterator it; 例如在 for 循环中的使用 for(set<int>::iterator it = a[x].begin(); it != a[x].end(); it++)
  6. insert(x) 将 x 插入容器 set 中,并且自动递增排序和去重
  7. fine(value) 返回 set 中对应值为 value 的迭代器,判断是否找到 st[y].find(*it) != st[y].end()
  8. erase(): st.erase(it), 删除迭代器 it 所在的元素; st.erase(value); 删除值为value;st.erase(first, last) 删除一个区间
  9. size() 获取 set 中元素个数 
  10. clear() 清空

string:

  1. 添加 #include <string> 以及 using namespace std;
  2. 定义:string str = "abcd";
  3. 访问:下标;迭代器(下标可以完成访问,但是insert、erase函数要求以迭代器为参数)string::iterator it = str.begin()
  4. += 拼接字符串;==、 <= 等关系运算符按照字典序
  5. str.length() / size()  长度
  6. str1.insert(pos, str2) 在 pos 号位置处插入字符串str2;insert(it, it2, it3) 将串[it2, it3) 插在 it 的位置上
  7. erase(it) 删除单个元素;erase(first, last); erase(pos, length) 删除以pos为起始的长度为length的串
  8. clear() 清空
  9. substr(pos, len) 返回从 pos 号位开始,长度为 len 的子串
  10. str.find(str2) 当str2是str的子串时,返回str第一次出现的位置;如果不是子串,返回 string::npos; str.find(pos, str2) 从pos号位开始匹配str2
  11. str.replace(pos, len, len2) 把str从pos号位开始,长度为len的子串替换为str2; str.replace(it1, it2, str2) 把str的迭代器[it1, it2) 范围的子串替换为str2
  12. 读入和输出整个字符串,只能用 cin 和 cout

map:

  1. 特点:可以将任何类型(包括STL容器)映射到任何基本类型(包括STL容器),同时会以键从小到大自动排序
  2. 用途:建立字符(字符串)与整数之间的映射;大整数或其他数据类型是否存在
  3. 添加 #include <map>, using namespce std;
  4. 定义:map<typename1, typename2> mp; 其中 typename1 为键(key),typename2 映射后类型 值(value);如果是字符串映射时,必须使用string,不可以使用char数组(因为char作为数组是不可能作为键值的);map<char, int> mp;
  5. 访问:通过下标直接访问 mp['c'] = 20; 迭代器访问: it->first 访问键, it->second访问值
  6. find(key) 返回键为key的迭代器;找不到 mp.find(key) == mp.end()
  7. erase(it) 删除;erase(key) 删除键为key; erase(first, end)
  8. size() 大小
  9. clear() 清空

queue:

  1. #include <queue>; usina namespce std;
  2. queue<int> q;
  3. 访问:只能通过front() 和 back() 来访问队首、队尾元素 q.front();
  4. q.push(1); 入队
  5. q.pop(); 队首元素出队
  6. q.empty() == true 队空
  7. q.size() 大小

priority_queue:

  1. 特点:队首元素一定是队列中优先级最高的,本质是堆
  2. #include <queue>; usina namespce std;
  3. priority_queue<int> name;
  4. 访问:只能通过 top() 函数来访问队首元素,没有front() 和 back()
  5. q.push(1); 入队
  6. q.pop(); 出队
  7. q.empty() == true 队空
  8. q.size() 大小
  9. 优先级设置:默认priority_queue<int> name; 数字最大、字典序最大的在队首;定义priority_queue<int, vector<int>, greater<int> >q;可以最小的放在队首

stack:

  1. #include <stack>; using namespce std;
  2. 只能通过top()访问栈顶元素
  3. push() pop() empty() size()
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值