STL(c++)快速全局总览

目的

本篇旨在总结STL的基本功能,帮助各位朋友实现对于高频语法的总览,在了解了语法之后,不断对比和接触例子,使自己对何时用如何用知识能够熟悉于心。

正题

容器(Containers):
vector(向量): 动态数组,支持快速的随机访问和在尾部的高效插入删除。
list(链表): 双向链表,支持在任意位置进行高效插入删除。
deque(双端队列): 双向队列,允许在两端进行高效插入删除操作。
queue(队列): 队列,先进先出(FIFO)。
stack(栈): 栈,后进先出(LIFO)。
set(集合): 不重复元素的有序集合。
map(映射): 键值对的有序映射。
unordered_set(无序集合): 不重复元素的无序集合。
unordered_map(无序映射): 键值对的无序映射。
算法(Algorithms):
sort(排序): 对容器进行排序。
find(查找): 在容器中查找元素。
binary_search(二分查找): 在有序容器中进行二分查找。
reverse(反转): 反转容器中的元素顺序。
rotate(旋转): 旋转容器中的元素。
accumulate(累加): 对容器中的元素进行累加。
max_element、min_element(最大最小元素): 查找容器中的最大和最小元素。
迭代器(Iterators):
begin、end(起始和结束迭代器): 标识容器的起始和结束位置。
advance(迭代器移动): 将迭代器向前或向后移动指定位置。
其他:
iostream(输入输出流): 提供了输入输出的基本功能。
algorithm(通用算法): 包含一些通用算法,如查找、排序等。

例子

再举几个例子
【向量vector,注意头文件和std哦】

#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 遍历向量并输出元素
    for (int element : vec) {
        std::cout << element << " ";
    }

    // 向向量末尾添加元素
    vec.push_back(6);

    return 0;
}

【集合set】

#include <set>
#include <iostream>

int main() {
    std::set<int> s = {3, 1, 4, 1, 5, 9, 2};

    // 遍历集合并输出元素
    for (int element : s) {
        std::cout << element << " ";
    }

    // 插入新元素
    s.insert(6);

    return 0;
}

【算法algorithm排序,注意sort的使用】

#include <algorithm>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {5, 2, 9, 1, 5, 6};

    // 对向量进行升序排序
    std::sort(vec.begin(), vec.end());

    // 输出排序后的向量
    for (int element : vec) {
        std::cout << element << " ";
    }

    return 0;
}

std:: 是 C++ 标准库(Standard Template Library,STL)中的命名空间。在C++中,标准库的类、函数和对象都被定义在 std 命名空间中。使用 std:: 的目的是为了防止命名冲突,因为C++标准库提供了大量的功能,而用户可能定义的名称可能与标准库中的名称相同。

各个容器有哪些方法

1. 向量(vector):
push_back(element):在向量末尾添加元素。
pop_back():删除向量末尾的元素。
size():返回向量中元素的个数。
empty():检查向量是否为空。
clear():清空向量中的所有元素。
front():返回向量中第一个元素的引用。
back():返回向量中最后一个元素的引用。
at(index):返回指定索引位置的元素的引用。
2. 列表(list):
push_front(element):在列表开头添加元素。
push_back(element):在列表末尾添加元素。
pop_front():删除列表开头的元素。
pop_back():删除列表末尾的元素。
size():返回列表中元素的个数。
empty():检查列表是否为空。
clear():清空列表中的所有元素。
front():返回列表中第一个元素的引用。
back():返回列表中最后一个元素的引用。
3. 队列(queue):
push(element):将元素推入队列。
pop():弹出队列头部的元素。
front():返回队列头部的元素的引用。
back():返回队列尾部的元素的引用。
size():返回队列中元素的个数。
empty():检查队列是否为空。
4. 集合(set):
insert(element):插入元素到集合中。
erase(element):从集合中删除指定元素。
find(element):查找集合中是否存在指定元素。
size():返回集合中元素的个数。
empty():检查集合是否为空。
clear():清空集合中的所有元素。
5. 映射(map):
insert(pair):插入键值对到映射中。
erase(key):删除映射中指定键的元素。
find(key):查找映射中指定键的元素。
size():返回映射中键值对的个数。
empty():检查映射是否为空。
clear():清空映射中的所有键值对。

好吧我知道你肯定记不住,一头雾水,所以我总结了它的共性和差异,如下,方便使用

容器方法的共性和差异

STL中的各个容器有一些共同的方法,同时也有一些在特定容器中独有的方法。以下是各个容器方法的相似处和差异处的总结:

相似处:
size(): 返回容器中元素的个数。
empty(): 检查容器是否为空。
clear(): 清空容器中的所有元素。
序列容器(如向量、列表、双端队列)的相似方法:
push_back(element): 在容器末尾添加元素。
pop_back(): 删除容器末尾的元素。
front(): 返回容器中第一个元素的引用。
back(): 返回容器中最后一个元素的引用。
关联容器(如集合、映射)的相似方法:
insert(element/pair): 插入元素或键值对到容器中。
erase(key/element): 删除指定键或元素。
find(key/element): 查找指定键或元素。
队列和栈的相似方法:
push(element): 将元素推入容器。
pop(): 弹出容器头部或尾部的元素。
差异处:
插入和删除方式: 不同容器在插入和删除元素时的效率不同。例如,向量适用于在末尾进行快速插入和删除,而列表适用于在任意位置进行快速插入和删除。

存储和访问方式: 不同容器采用不同的存储和访问方式。例如,向量和数组都支持通过下标直接访问元素,而集合和映射则通过键来访问元素。

排序和搜索: 不同容器对于排序和搜索的支持也有差异。例如,集合和映射是有序容器,可以进行二分查找,而向量和列表则需要使用std::sort等算法进行排序。

空间和时间复杂度: 不同容器在空间和时间复杂度上也存在差异。选择合适的容器需要考虑到具体的使用场景和性能需求。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值