以下是 C++ 中常用的 STL(标准模板库)函数总结:
一、容器相关
vector
(动态数组)- 构造函数
vector<T> v;
:创建一个空的vector
,其中T
是元素类型。vector<T> v(n);
:创建一个包含n
个默认初始化元素的vector
。vector<T> v(n, value);
:创建一个包含n
个值为value
的元素的vector
。
- 添加元素
v.push_back(element);
:在vector
的末尾添加一个元素element
。
- 访问元素
v[i]
:通过下标i
访问vector
中的元素,不进行边界检查。v.at(i)
:通过下标i
访问vector
中的元素,进行边界检查,越界会抛出out_of_range
异常。
- 获取大小和容量
v.size()
:返回vector
中元素的个数。v.capacity()
:返回vector
当前分配的存储空间能够容纳的元素数量。
- 删除元素
v.pop_back();
:删除vector
末尾的一个元素。
- 构造函数
list
(双向链表)- 构造函数
- 类似
vector
,有list<T> l;
、list<T> l(n);
、list<T> l(n, value);
等形式。
- 类似
- 添加元素
l.push_back(element);
:在链表末尾添加元素。l.push_front(element);
:在链表头部添加元素。
- 访问元素
- 不支持随机访问,只能通过迭代器逐步访问。例如:
for (auto it = l.begin(); it!= l.end(); ++it) { cout << *it << endl; }
- 不支持随机访问,只能通过迭代器逐步访问。例如:
- 构造函数
- 删除元素
l.pop_back();
:删除链表末尾元素。l.pop_front();
:删除链表头部元素。l.remove(value);
:删除链表中所有值为value
的元素。
-
map
(关联容器,键 - 值对)- 构造函数
map<Key, Value> m;
:创建一个空的map
,其中Key
是键类型,Value
是值类型。
- 插入元素
m.insert(pair<Key, Value>(key, value));
:插入一个键值对。m[key]=value;
:如果key
不存在,则插入键值对;如果key
已存在,则更新对应的值。
- 查找元素
m.find(key)
:返回指向键为key
的元素的迭代器,如果不存在则返回m.end()
。
- 访问元素
- 通过键来访问值,例如
m[key]
。
- 通过键来访问值,例如
- 删除元素
m.erase(key);
:删除键为key
的元素。
- 构造函数
-
set
(集合,只存储唯一元素)- 构造函数
set<T> s;
:创建一个空的set
。
- 插入元素
s.insert(element);
:插入一个元素,如果元素已存在则不做任何操作。
- 查找元素
s.find(element)
:返回指向元素的迭代器,如果不存在则返回s.end()
。
- 删除元素
s.erase(element);
:删除指定元素。
- 构造函数
二、算法相关(<algorithm>
头文件)
- 排序算法
sort(begin, end)
:对指定区间[begin, end)
内的元素进行排序,默认使用<
运算符比较元素。例如,对vector<int> v
排序:sort(v.begin(), v.end());
stable_sort(begin, end)
:稳定排序,保证相等元素的相对顺序不变。
- 查找算法
find(begin, end, value)
:在区间[begin, end)
内查找值为value
的元素,返回指向该元素的迭代器,如果不存在则返回end
。例如,在vector<int> v
中查找5
:auto it = find(v.begin(), v.end(), 5);
binary_search(begin, end, value)
:在已排序的区间[begin, end)
内使用二分查找法查找值为value
的元素,返回true
或false
。
- 数值算法
accumulate(begin, end, init)
:计算区间[begin, end)
内元素的总和,初始值为init
。例如,计算vector<int> v
的元素总和:int sum = accumulate(v.begin(), v.end(), 0);
三、迭代器相关
begin()
和end()
- 几乎所有容器都提供这两个函数,
begin()
返回指向容器第一个元素的迭代器,end()
返回指向容器末尾(最后一个元素之后)的迭代器。例如:vector<int> v = {1, 2, 3}; for (auto it = v.begin(); it!= v.end(); ++it) { cout << *it << endl; }
- 几乎所有容器都提供这两个函数,
rbegin()
和rend()
- 用于反向迭代器,
rbegin()
指向容器的最后一个元素,rend()
指向容器第一个元素之前的位置。适用于需要反向遍历容器的情况。例如:
- 用于反向迭代器,
list<int> l = {1, 2, 3};
for (auto it = l.rbegin(); it!= l.rend(); ++it) {
cout << *it << endl;
}
喜欢的朋友可以点点关注,下期再给大家分享干货!