STL标准模板库
1、vector
vector<int> res;
res.front(); // res的首元素
res.back(); // res的尾元素
for (int i = 0; i < n; i++) {
if (res.at(i) == 1) { // 寻找res中元素等于1的下标
}
}
调用std::remove,想要删除元素,必须配合erase成员函数才行,将std::remove返回的迭代器至end全部删除,以下是删除一个val值
vector<int> nums;
nums.erase(std::remove(nums.begin(), nums.end(), val), nums.end());
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v = {1, 2, 3, 2, 4, 2, 5, 6};
int val = 2; // 要删除的值
// 使用 remove_if 和 lambda 表达式来将所有等于 val 的元素移动到容器末尾
v.erase(std::remove_if(v.begin(), v.end(), [val](int i) { return i == val; }), v.end());
// 此时 v 中所有等于 val 的元素都被删除了
// 输出结果以验证
for (int i : v) {
std::cout << i << ' ';
}
std::cout << '\n';
return 0;
}
2、stack
栈是一种后进先出(Last in First out,LIFO)的数据类型,每次元素入栈时只能添加到栈顶,出栈时只能从栈顶元素出栈。C++中,使用栈需要包含头文件,C++中栈的基本操作如下:
push(); // 入栈。在栈顶添加一个元素,无返回值;
pop(); // 出栈。将栈顶元素删除(出队),无返回值;
top(); // 获得栈顶元素。此函数返回值为栈顶元素,常与pop()函数一起,先通过top()获得栈顶元素,然后将其从栈中删除;
size(); // 获得栈大小。此函数返回栈的大小,返回值也是“size_t”类型的数据,“size_t”是“unsigned int”的别名。
empty(); // 判断栈是否为空。此函数返回栈是否为空,返回值是bool类型。栈空:返回true;不空:返回false。
3、queue
队列是一种先进先出(First in First out,FIFO)的数据类型,每次元素的入队都只能添加到队列尾部,出队时从队列头部开始出。C++中,使用队列需要包含头文件,C++中队列的基本操作如下:
push(); // 入队。在队列尾端添加一个元素,无返回值;
pop(); // 出队。将队列头部元素删除(出队),无返回值;
front(); // 获得队列头部元素。此函数返回值为队列的头部元素,常与pop()函数一起,先通过front()获得队列头部元素,然后将其从队列中删除;
size(); // 获得队列大小。此函数返回队列的大小,返回值是“size_t”类型的数据,“size_t”是“unsigned int”的别名。
empty(); // 判断队列是否为空。此函数返回队列是否为空,返回值是bool类型。队列空:返回true;不空:返回false。
back(); // 返回队列尾部元素,就是队列中最后一个进去的元素。
4、set
哈希数据结构,std::set, std::multiset, unordered_set常用操作
set<int> s;
s.begin() // 返回指向第一个元素的迭代器
s.end() // 返回指向最后一个元素的迭代器
s.clear() // 清除所有元素
s.count() // 返回某个值元素的个数
s.empty() // 如果集合为空,返回true,否则返回false
s.equal_range() // 返回集合中与给定值相等的上下限的两个迭代器
s.erase() // 删除集合中的元素
s.find(k) // 返回一个指向被查找到元素的迭代器
s.insert() // 在集合中插入元素
s.lower_bound(k) // 返回一个迭代器,指向键值大于等于k的第一个元素
s.upper_bound(k) // 返回一个迭代器,指向键值大于k的第一个元素
s.max_size() // 返回集合能容纳的元素的最大限值
s.rbegin() // 返回指向集合中最后一个元素的反向迭代器
s.rend() // 返回指向集合中第一个元素的反向迭代器
s.size() // 集合中元素的数目
5、map
C++中map是一种关联式容器,包含“键值”对
map<int, int> m;
m.begin() // 返回指向map头部的迭代器
m.clear() // 删除所有元素
m.count() // 返回指定元素出现的次数,因为key值不会重复,所以只能是1 or 0
m.empty() // 如果map为空则返回true
m.end() // 返回指向map末尾的迭代器
m.equal_range() // 返回特殊条目的迭代器对
m.erase() // 删除一个元素
m.find() // 查找一个元素,返回的是迭代器
m.get_allocator() // 返回map的配置器
m.insert() // 插入元素
m.key_comp() // 返回比较元素key的函数
m.lower_bound() // 返回键值>=给定元素的第一个位置
m.max_size() // 返回可以容纳的最大元素个数
m.rbegin() // 返回一个指向map尾部的逆向迭代器
m.rend() // 返回一个指向map头部的逆向迭代器
m.size() // 返回map中元素的个数
m.swap() // 交换两个map
m.upper_bound() // 返回键值>给定元素的第一个位置
m.value_comp() // 返回比较元素value的函数
6、string
string str;
str.push_back(); // 在尾部插入元素
str.pop_back(); // 在尾部弹出元素
str.substr(pos, n); // 从下标为pos开始截取字符串,截取长度为n
int pos = str.find("QQ"); // 查找子字符串"QQ"的位置
str.insert(5, "Beautiful"); // 在下标5处插入字符串"Beautiful"
str.erase(s.begin() + 1); // 使下标1的字符删除
sort(s.begin(), s.end()) // 排序,需要头文件#include <algorithm>