C++ STL常用查询手册

当然可以,以下是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): void
  • insert(pos, x): iterator
  • pop_back(), pop_front(): void
  • erase(pos), erase(first, last): iterator
  • clear(): void
  • at(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中提到的五种容器的迭代器定义和使用示例代码:

cpp 复制代码
#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;
}

说明:

  1. vector :使用vector<int>::iterator定义迭代器vecIt。

  2. list :使用list<int>::iterator定义迭代器lstIt。

  3. deque :使用deque<int>::iterator定义迭代器deqIt。

  4. set :使用set<int>::iterator定义迭代器stIt。

  5. map :使用map<string, int>::iterator定义迭代器mpIt。

迭代器用于遍历容器中的元素。在for循环中,迭代器从容器的begin()开始,直到end()结束。对于map,迭代器指向pair对象,可以使用->first和->second来访问键值对。

注意,迭代器的定义应该在循环外部进行,以避免在每次迭代中重复定义迭代器,这有助于提高代码的清晰度和效率。

相关推荐
菜鸟~noob2332 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫3 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_3 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
搭贝3 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子4 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/4 小时前
7.javase-面向对象
java·开发语言
weixin_531094694 小时前
heap_4内存管理
java·开发语言·算法
余额瞒着我当琳4 小时前
红黑树的实现--红黑树的概念、规则、效率、结构、旋转、查找、验证
数据结构·c++·算法
疯狂的维修4 小时前
关于用C#写电机起保停控制
开发语言·c#
青少儿编程课堂4 小时前
AC自动机多模式串匹配精讲:校园关键词巡检实战解析
c++·python·算法·bfs·信息学竞赛