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() 迭代器

注意:setmap中的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)setmap 中用于查找具有特定值的元素。
    • 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来访问键值对。

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

相关推荐
tyler_download4 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
小小小~4 分钟前
qt5将程序打包并使用
开发语言·qt
hlsd#5 分钟前
go mod 依赖管理
开发语言·后端·golang
小春学渗透6 分钟前
Day107:代码审计-PHP模型开发篇&MVC层&RCE执行&文件对比法&1day分析&0day验证
开发语言·安全·web安全·php·mvc
杜杜的man9 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
亦世凡华、9 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
神仙别闹16 分钟前
基于MFC实现的赛车游戏
c++·游戏·mfc
小c君tt24 分钟前
MFC中 error C2440错误分析及解决方法
c++·mfc
测试界的酸菜鱼24 分钟前
C# NUnit 框架:高效使用指南
开发语言·c#·log4j
GDAL24 分钟前
lua入门教程 :模块和包
开发语言·junit·lua