cpp标准库函数总结
在解题中总是记不住那些复杂又难懂的cpp标准库函数用法,于是痛下决心写一个简单的总结记录下遇到过的常见用法(这该死的脑子总是不够用😭)
1. 容器相关
std::vector
- 功能:动态数组,可根据需要自动调整大小。
- 常用操作:
push_back()
:在向量末尾添加元素。
pop_back()
:移除向量末尾的元素。
size()
:返回向量中元素的数量。
empty()
:判断向量是否为空。
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(1);
vec.push_back(2);
std::cout << "Size: " << vec.size() << std::endl;
vec.pop_back();
std::cout << "Is empty: " << (vec.empty() ? "Yes" : "No") << std::endl;
return 0;
}
std::stack
- 功能:实现后进先出(LIFO)的数据结构。
- 常用操作:
push()
:将元素压入栈顶。
pop()
:移除栈顶元素。
top()
:返回栈顶元素的引用。
empty()
:判断栈是否为空。
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream>
#include <stack>
int main() {
std::stack<int> st;
st.push(1);
st.push(2);
std::cout << "Top: " << st.top() << std::endl;
st.pop();
std::cout << "Is empty: " << (st.empty() ? "Yes" : "No") << std::endl;
return 0;
}
std::queue
- 功能:实现先进先出(FIFO)的数据结构。
- 常用操作:
push()
:将元素加入队列尾部。
pop()
:移除队列头部元素。
front()
:返回队列头部元素的引用。
empty()
:判断队列是否为空。
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
q.push(1);
q.push(2);
std::cout << "Front: " << q.front() << std::endl;
q.pop();
std::cout << "Is empty: " << (q.empty() ? "Yes" : "No") << std::endl;
return 0;
}
std::priority_queue
- 功能:优先队列,元素按照优先级排序,默认最大元素在队首。
- 常用操作:
push()
:插入元素到优先队列中。
pop()
:移除队首元素。
top()
:返回队首元素的引用。
empty()
:判断优先队列是否为空。
1
2
3
4
5
6
7
8
9
10
11
12
13#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> pq;
pq.push(3);
pq.push(1);
pq.push(2);
std::cout << "Top: " << pq.top() << std::endl;
pq.pop();
std::cout << "New top: " << pq.top() << std::endl;
return 0;
}
关于序列式容器在 OI Wiki
上有比较详细的介绍: 序列式容器
2. 算法相关
std::sort
- 功能:对指定范围内的元素进行排序,默认升序。
- 常用操作:
- 可传入自定义比较函数实现降序或其他排序规则。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <iostream>
#include <vector>
#include <algorithm>
bool compare(int a, int b) {
return a > b;
}
int main() {
std::vector<int> vec = {3, 1, 2};
std::sort(vec.begin(), vec.end()); // 升序
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
std::sort(vec.begin(), vec.end(), compare); // 降序
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
- 可传入自定义比较函数实现降序或其他排序规则。
std::sort
不仅支持std:vector
,同样支持std::deque
、std::array
、甚至是普通的
C 风格数组(需传入数组的起始地址和结束地址)
1 |
|
std::binary_search
- 功能:在有序序列中进行二分查找,判断元素是否存在。
- 返回值:如果找到元素返回
true
,否则返回false
。
1
2
3
4
5
6
7
8
9
10#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
bool found = std::binary_search(vec.begin(), vec.end(), 3);
std::cout << "Is 3 found: " << (found ? "Yes" : "No") << std::endl;
return 0;
}
std::lower_bound
和 std::upper_bound
- 功能:
std::lower_bound
:返回有序序列中第一个不小于给定值的元素的迭代 器。
std::upper_bound
:返回有序序列中第一个大于给定值的元素的迭代 器。
1
2
3
4
5
6
7
8
9
10
11
12#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {1, 2, 2, 3, 4};
auto low = std::lower_bound(vec.begin(), vec.end(), 2);
auto up = std::upper_bound(vec.begin(), vec.end(), 2);
std::cout << "Lower bound index: " << low - vec.begin() << std::endl;
std::cout << "Upper bound index: " << up - vec.begin() << std::endl;
return 0;
}
3. 字符串相关
std::to_string
- 功能:将基本数据类型转换为字符串。
1
2
3
4
5
6
7
8
9#include <iostream>
#include <string>
int main() {
int num = 123;
std::string str = std::to_string(num);
std::cout << "Converted string: " << str << std::endl;
return 0;
}
std::stoi
、std::stol
、std::stoll
- 功能:将字符串转换为整数类型,分别对应
int
、long
、long long
。
1
2
3
4
5
6
7
8
9#include <iostream>
#include <string>
int main() {
std::string str = "123";
int num = std::stoi(str);
std::cout << "Converted integer: " << num << std::endl;
return 0;
}
4. 数学相关
std::max
和
std::min
- 功能:返回两个值中的最大值或最小值。
1
2
3
4
5
6
7
8
9#include <iostream>
#include <algorithm>
int main() {
int a = 1, b = 2;
std::cout << "Max: " << std::max(a, b) << std::endl;
std::cout << "Min: " << std::min(a, b) << std::endl;
return 0;
}
std::abs
- 功能:返回一个数的绝对值。
1
2
3
4
5
6
7
8#include <iostream>
#include <cmath>
int main() {
int num = -5;
std::cout << "Absolute value: " << std::abs(num) << std::endl;
return 0;
}
cpp标准库函数总结
http://jrhu0048.github.io/2025/05/07/suan-fa-shua-ti/cpp-biao-zhun-ku-han-shu-zong-jie/