【C/C++】STL学习所得

这篇具有很好参考价值的文章主要介绍了【C/C++】STL学习所得。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STL 框架核心组成部分

  1. 算法
  2. 容器
  3. 迭代器
  4. 适配器
  5. 空间配置器
  6. 访函数

STL 序列容器分类

  1. vector
  2. queue
  3. list
  4. array
  5. forward_list

STL 容器适配器分类

  1. stack 栈
  2. queue 队列
  3. priority_queue 优先级队列

STL 迭代器分类

  1. 输入迭代器;
  2. 输出迭代器;
  3. 正向迭代器;
  4. 双向迭代器;
  5. 随机迭代器

STL 中一些易混淆知识点

  1. STL 是谁开发的?
    STL 是由A_xx、M_xx、D_xx 三个大佬在惠普实验室开发的。

  2. array 容器会支持边界检查吗?
    不支持。可以利用容器的at方法,进行判断array容器中即将访问的元素是否存在,若不存在at方法,会返回std::out_of_range的异常。

  3. deque 容器支持一次性删除多个元素吗?
    支持。比如:

// 删除索引为1到3的元素(包括1和3)
dq.erase(dq.begin() + 1, dq.begin() + 4);
  1. 迭代器是指针吗?
    迭代器不一定是指针,但它们可以类似于指针的操作。迭代器是一种抽象的概念,它提供了对容器中元素的访问和操作的方式。
    对于大多数STL容器,迭代器通常是一个类对象,而不是指针。这是因为STL迭代器需要提供更多的功能,例如支持随机访问、迭代器失效处理等。迭代器类对象通常会重载一些运算符,以实现类似指针的操作,如解引用、自增、自减等。
    然而,对于一些底层的容器,如std::array和std::vector,它们的迭代器可以是指针。这是因为这些容器在内存中是连续存储的,因此可以直接使用指针来表示迭代器。

  2. vector 容器中的iterator 迭代器是随机迭代器吗?
    是的。因为vector容器的内存是连续的,所以可以进行随机访问容器内存。文章来源地址https://www.toymoban.com/news/detail-677388.html

一些重要的简述

  1. 简述 STL 中迭代器与C++指针的异同点。
相同点:

都用于访问和操作数据结构中的元素。

都支持解引用操作,可以通过迭代器或指针获取元素的值。

都支持自增和自减操作,可以在容器或数组中移动到下一个或上一个元素。

异同点:

类型:迭代器是STL中的一种抽象概念,可以是类对象,也可以是指针。而指针是C++语言中的原生类型。

功能:迭代器提供了更多的功能,如随机访问、迭代器失效处理等。指针只提供了基本的指针操作。

范围:迭代器可以用于不同类型的容器,如vector、list、deque等。指针主要用于数组和指针类型。

安全性:迭代器提供了一些安全机制,如边界检查、失效处理等,以防止访问越界或失效的迭代器。指针没有这些安全机制,需要程序员自己负责边界检查和失效处理。

迭代器分类:STL中的迭代器有多种分类,如输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器。每种迭代器都有不同的功能和限制。指针可以被视为随机访问迭代器。

总的来说,迭代器是STL中用于访问和操作容器元素的抽象概念,提供了更多的功能和安全机制。指针是C++语言中的原生类型,主要用于数组和指针类型,功能相对较简单。在使用STL时,迭代器是首选的元素访问方式,而指针则更适用于一些特定的场景。
vector:
1. 类似于动态数组,增删过程中自动调整自身大小。即vector容器可自动处理存储数据所需的空间;
2. 容器内存空间具有连续性;
3. 新增插入元素,元素位置越靠前,插入效率越低;同样的,删除元素,该元素位置越靠前,删除效率越低;
4. 用一个vector容器初始化另一个vector容器的元素,元素类型必须相同;
5. vector 迭代器存在失效风险。原因是,因为vector容器是一个顺序容器,内存是连续的,当增删元素后,为了保证容器数据连续性,容器中元素会移动,相应地数据地址也发生了变化,所以迭代器访问时就会失效出错。
deque:
1、deque容器与vector容器相似,都是动态内存管理;
2、与vector容器相比,deque容器支持两端增删元素;
3、与vector容器相比,不支持vector容器的reserve、capacity、data,新增了pop_front(), push_front(), 用于从队列首部弹出与插入元素的方法;

array:
1、array容器大小固定,不允许增删容器元素;
  1. 简述关联容器中各个容器的特点。
    关联容器,都是以二叉树作为内部数据结构,可实现高效查找元素,但是不可以进行任意位置的操作。
set与multiset:
1、二者都是集合(区别在于对于重复元素的允许。前者允许,后者拒绝);
2、二者要求存储的数据类型一致;
3、二者都支持增删查,对于修改,不可以直接进行修改(因为二叉树中元素变动,必须自动排序),若需要修改元素,必须要先查找到原元素,删除原先元素,再进行新增新元素,新元素会被放置到一个自动排序的位子。
map与multimap:
1、二者都是映射,类似于字典;
2、前者映射,不允许存在重复的键值元素对,然后,后者映射,允许重复的键值元素对。

到了这里,关于【C/C++】STL学习所得的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++STL学习第一篇(什么是STL以及string的各种功能用法)

    STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。 数据结构和容器管理:STL 提供了多种数据结构和容器,如向量(vector)、链表(list)、集合(set)、映射(map)等。这些容器可以帮助程序员方便地存储和

    2024年03月09日
    浏览(35)
  • 【C++】学习STL中的list

            大家好!,今天为大家带来的一篇博客是关于STL中的list,内容主要包括list的介绍使用、list的模拟实现。以及list与vector的对比。         首先,让我们看看list的文档介绍: list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向

    2024年02月10日
    浏览(40)
  • 【C++学习】STL容器——list

    目录 一、list的介绍及使用 1.1 list的介绍  1.2 list的使用 1.2.1 list的构造  1.2.2  list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list 迭代器失效 二、list的模拟实现 2.1 模拟实现list 三、list和vector的对比 一、list的介绍及使用 1.1 list的介绍 list的文档介绍

    2024年02月14日
    浏览(40)
  • 带你深入理解“栈”(c语言 c++和stl Stack三个版本的模拟实现)

    目录 一.栈的概念及结构 二.栈的实现(c语言版) 2.1静态增长的栈 2.2动态增长的栈 2.3动态栈的模拟实现    1.栈的初始化   2.入栈  3.出栈 4.获取栈顶元素 5.获取栈中有效数据个数 6.检查栈是否为空 7.栈的销毁 三.C++ 版本模拟实现栈  1.C++版本的源代码 四.c语言版本的源代码

    2024年02月08日
    浏览(45)
  • c++学习:STL之string类初识

    目录 1.关于STL 1.什么是STL 2.STL的六的组件 2.关于string类的学习 1.为何学习string类 2.何为string类 3.string类对象的构造 4.容量操作  5.元素访问的操作 6.迭代器(Iterators) 7.修改类的操作  8.字符串操作 STL(standard template library-标准模板库):是c++标准库的重要组成部分,不仅是一

    2024年02月03日
    浏览(70)
  • 面试之快速学习STL-迭代适配器

    参考:http://c.biancheng.net/view/7255.html 例子: 想使用反向迭代器实现逆序遍历容器,则该容器的迭代器类型必须是双向迭代器或者随机访问迭代器。 常见操作 注意这里不能用std::list,因为它是双向迭代器, +3的操作需要随机访问迭代器 。故联想到std::list排序只能使用list提供的

    2024年02月11日
    浏览(44)
  • 面试之快速学习STL-map

    包括 map、multimap、set 以及 multiset 这 4 种容器。 和序列式容器区别: a . 关联式容器在存储元素时还会为每个元素在配备一个键,整体以键值对的方式存储到容器中。 b . 相比前者,关联式容器可以通过键值直接找到对应的元素,而无需遍历整个容器。 c . 另外,关联式容器在

    2024年02月12日
    浏览(35)
  • 面试之快速学习STL-multimap

    multimap 容器也用于存储 pairconst K, T 类型的键值对(其中 K 表示键的类型,T 表示值的类型) 其中各个键值对的键不能做修改;该容器也会自行根据键的大小对存储的所有键值对做排序操作。 和 map 容器的区别在于,multimap 容器中可以同时存储多(≥2)个键相同的键值对。

    2024年02月12日
    浏览(38)
  • 面试之快速学习STL-set

    和 map、multimap 容器不同,使用 set 容器存储的各个键值对,要求键 key 和值 value 必须相等 使用 set 容器存储的各个元素的值必须各不相同 从语法上讲 set 容器并 没有强制对存储元素的类型做 const 修饰, 即 set 容器中存储的元素的值是可以修改的。但是,C++ 标准为了防止用户修

    2024年02月12日
    浏览(31)
  • 【C++】学习STL中的stack和queue

            今天这篇博客的内容主要关于STL中的stack、queue和priority_queue三种容器。         stack和queue的使用方式非常简单,我们只要根据之前学习数据结构的经验和文档介绍就可以轻松上手。于是我们直接开始对它们的模拟实现。         stack和queue我们在数据结构阶段就曾经

    2024年02月10日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包