当然可以,以下是C++ STL中提到的几种容器的常用增删改查操作的函数,以及每个函数的文字说明,以表格形式展示:
vector:动态数组,可以增长和收缩。
list:双向链表。
deque:双端队列,支持快速的随机访问。
set:基于红黑树的有序不重复元素集合。
map:基于红黑树的键值对集合。
以下是C++ STL中提到的五种容器的增删改查操作的函数及其说明和返回值类型的表格:
| 操作类型 | vector | list | deque | set | map |
|---|---|---|---|---|---|
| 增 | push_back(x): 在尾部添加元素 x | push_back(x): 在尾部添加元素 x | push_back(x): 在尾部添加元素 x | insert(x): 将元素 x 插入到集合中 | insert(x): 将键值对 x 插入到映射中 |
push_front(x): 在头部添加元素 x | push_front(x): 在头部添加元素 x | push_front(x): 在头部添加元素 x | |||
emplace_back(args): 构造元素并添加到尾部 | emplace_back(args): 构造元素并添加到尾部 | emplace_back(args): 构造元素并添加到尾部 | emplace(x): 构造元素并插入到集合中 | emplace(k, v): 构造键值对并插入到映射中 | |
insert(pos, x): 在位置 pos 插入元素 x | insert(pos, x): 在位置 pos 插入元素 x | insert(pos, x): 在位置 pos 插入元素 x | insert(x): 在位置 pos 插入元素 x | insert(x): 在位置 pos 插入键值对 x | |
| 删 | pop_back(): 删除尾部元素 | pop_back(): 删除尾部元素 | pop_back(): 删除尾部元素 | erase(x): 删除元素 x | erase(k): 删除键为 k 的元素 |
pop_front(): 删除头部元素 | pop_front(): 删除头部元素 | pop_front(): 删除头部元素 | erase(first, last): 删除区间 [first, last) | erase(first, last): 删除区间 [first, last) | |
erase(pos): 删除位置 pos 的元素 | erase(pos): 删除位置 pos 的元素 | erase(pos): 删除位置 pos 的元素 | clear(): 删除所有元素 | clear(): 删除所有元素 | |
| 改 | at(i): 返回索引 i 处的元素引用 | at(i): 返回索引 i 处的元素引用 | at(i): 返回索引 i 处的元素引用 | *find(x): 返回找到的元素的引用 | at(k): 返回键 k 处的元素值的引用 |
operator[](i): 返回索引 i 处的元素引用 | operator[](i): 返回索引 i 处的元素引用 | operator[](i): 返回索引 i 处的元素引用 | operator[](k): 返回键 k 处的元素值的引用 | ||
| 查 | front(): 返回第一个元素的引用 | front(): 返回第一个元素的引用 | front(): 返回第一个元素的引用 | find(x): 返回找到的元素的迭代器 | find(k): 返回找到的键值对的迭代器 |
back(): 返回最后一个元素的引用 | back(): 返回最后一个元素的引用 | back(): 返回最后一个元素的引用 | |||
at(i): 返回索引 i 处的元素引用 | at(i): 返回索引 i 处的元素引用 | at(i): 返回索引 i 处的元素引用 | count(x): 返回元素 x 的数量 | count(k): 返回键 k 的数量 | |
operator[](i): 返回索引 i 处的元素引用 | operator[](i): 返回索引 i 处的元素引用 | operator[](i): 返回索引 i 处的元素引用 |
返回值类型:
push_back(x),push_front(x),emplace_back(args),emplace_front(args):voidinsert(pos, x):iteratorpop_back(),pop_front():voiderase(pos),erase(first, last):iteratorclear():voidat(i): 引用到指定索引的元素operator[](i): 引用到指定索引的元素front(),back(): 引用到第一个或最后一个元素find(x),find(k): 指向找到元素的迭代器,如果未找到,则为end()迭代器
注意:set和map中的find(x)和count(x)函数用于查找元素或键,map中的at(k)和operator[](k)用于访问键对应的值。如果at(k)在map中找不到给定的键,则抛出std::out_of_range异常。
说明:
-
增:添加元素到容器中。
push_back(x)和push_front(x)分别在容器的尾部和头部添加元素x。emplace_back(args),emplace_front(args), 和emplace()是就地构造元素,避免额外的复制或移动。insert(pos, x)可以在指定位置插入元素。
-
删:从容器中删除元素。
pop_back()和pop_front()分别删除容器尾部和头部的元素。erase(pos)删除指定位置的元素或区间。clear()清空容器。
-
改:修改容器中的元素。
at(i)提供了访问指定位置元素的方法,若索引越界则抛出异常。operator[](i)也提供访问,但不检查越界。
-
查:查询容器中的元素。
at(i)或operator[](i)用于访问元素。front()和back()分别访问容器的第一个和最后一个元素。find(x)在set和map中用于查找具有特定值的元素。begin()和end()返回指向第一个元素和最后一个元素之后位置的迭代器。
这些操作是容器类的基本功能,使用时需要包含相应的头文件,例如 <vector>, <list>, <deque>, <set>, 和 <map>。
以下是C++ STL中提到的五种容器的迭代器定义和使用示例代码:
#include <iostream>
#include <vector>
#include <list>
#include <deque>
#include <set>
#include <map>
#include <string>
using namespace std;
int main() {
// vector
vector<int> vec = {1, 2, 3, 4, 5};
vector<int>::iterator vecIt;
for (vecIt = vec.begin(); vecIt != vec.end(); ++vecIt) {
cout << *vecIt << " ";
}
cout << endl;
// list
list<int> lst = {1, 2, 3, 4, 5};
list<int>::iterator lstIt;
for (lstIt = lst.begin(); lstIt != lst.end(); ++lstIt) {
cout << *lstIt << " ";
}
cout << endl;
// deque
deque<int> deq = {1, 2, 3, 4, 5};
deque<int>::iterator deqIt;
for (deqIt = deq.begin(); deqIt != deq.end(); ++deqIt) {
cout << *deqIt << " ";
}
cout << endl;
// set
set<int> st = {1, 2, 3, 4, 5};
set<int>::iterator stIt;
for (stIt = st.begin(); stIt != st.end(); ++stIt) {
cout << *stIt << " ";
}
cout << endl;
// map
map<string, int> mp = {{"one", 1}, {"two", 2}, {"three", 3}};
map<string, int>::iterator mpIt;
for (mpIt = mp.begin(); mpIt != mp.end(); ++mpIt) {
cout << mpIt->first << " : " << mpIt->second << " ";
}
cout << endl;
return 0;
}
说明:
-
vector:使用
vector<int>::iterator定义迭代器vecIt。 -
list:使用
list<int>::iterator定义迭代器lstIt。 -
deque:使用
deque<int>::iterator定义迭代器deqIt。 -
set:使用
set<int>::iterator定义迭代器stIt。 -
map:使用
map<string, int>::iterator定义迭代器mpIt。
迭代器用于遍历容器中的元素。在for循环中,迭代器从容器的begin()开始,直到end()结束。对于map,迭代器指向pair对象,可以使用->first和->second来访问键值对。
注意,迭代器的定义应该在循环外部进行,以避免在每次迭代中重复定义迭代器,这有助于提高代码的清晰度和效率。










