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来访问键值对。

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

相关推荐
Tech_gis22 分钟前
C++ 观察者模式
开发语言·c++·观察者模式
卑微求AC22 分钟前
继电器原理及应用
c语言·开发语言·51单片机·嵌入式
曳渔28 分钟前
Java-数据结构-反射、枚举 |ू・ω・` )
java·开发语言·数据结构·算法
laocooon52385788629 分钟前
java 模拟多人聊天室,服务器与客户机
java·开发语言
风槐啊30 分钟前
六、Java 基础语法(下)
android·java·开发语言
꧁༺❀氯ྀൢ躅ྀൢ❀༻꧂40 分钟前
算法与程序课程设计——观光铁路
c语言·c++·算法·课程设计·dijkstra 算法·spfa算法
网安老伯1 小时前
【2024版】最新kali linux入门及常用简单工具介绍(非常详细)零基础入门到精通,收藏这一篇就够了_kalilinux
linux·运维·服务器·开发语言·web安全·网络安全·xss
laocooon5238578861 小时前
java类的混搭,
java·开发语言
忘梓.1 小时前
C嘎嘎入门篇:类和对象番外(时间类)
c++·算法
爱写代码的小朋友1 小时前
Python 中的高阶函数与闭包
开发语言·python