《STL源码剖析》---list容器insert操作的个人理解

2023-05-16

       最近在看STL源码剖析,感觉还是挺深奥的,感觉看不太懂。今天在看list容器这块,讲到了insert操作,便记录一番自己的理解吧。
       摘抄书上的:
 iterator insert (iterator position,const T& x)
{
     link_type tmp = create_node(x); //产生一个节点(初始化内容为x)
     //调整双向指标,使tmp安插进去
     tmp->next = position.node;
     tmp->prev = position.node->prev;
     (link_type(position.node->prev))->next = tmp;
     position.node->prev = tmp;
     return tmp;
}

        一开始看这个一直看不懂,因为之前学C++的时候,list容器没怎么掌握,现在的话对其具体的认识还是不够的,只是例如:push_back()等操作知道是干什么。这个insert操作里面的东西一开始不清楚,后来仔细理解了一番不知道是不是对的。

1.

create_node(x);    //<span style="font-size: 18px; font-family: Arial;">创建一个新的节点这个知道。</span>
2.
tmp->next = position.node;
position.node->prev = tmp;

       这里我的理解是,因为list是双向的。在position的位置插入元素x,现在创建了一个新的节点tmp,其data为x,要实现双向,首先该新节点要链接到下一个节点。因为是在position的位置插入新的元素,因此这个新节点的下一个节点自然而然就是position这个节点,所以:

tmp->next = position.node;

       以上操作就是建立tmp与position的链接;然后实现双向,则position的前一个节点需为tmp,所以:

position.node->prev = tmp;

       以上操作就使得tmp与position这个位置的节点之间建立了双向链接;

3.

       然后就是要实现tmp与position位置节点原来的前一个节点直接实现双向链接,因此就需要:

tmp->prev = position.node->prev; 
(link_type(position.node->prev))->next = tmp;
       首先第一步,position位置节点原来指向的前一个节点,现在转变为tmp指向的前一个,所以:
tmp->prev = position.node->pref;
       这样就实现了tmp与前一个节点的单向链接;第二步,position位置节点原来的那个节点与tmp的链接,所以:
(link_type(position.node->prev))->next = tmp;
       得到其原先的前一个节点:link_type(position.node->pref),然后该节点的next指向tmp。


       以上便实现了list容器插入元素并且建立双向链接。个人理解。

转载于:https://www.cnblogs.com/zhong-dev/p/4044583.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《STL源码剖析》---list容器insert操作的个人理解 的相关文章

  • Android中线程加载的Web图像

    我在 ListActivity 中有一个扩展的 BaseAdapter private static class RequestAdapter extends BaseAdapter 以及其中定义的一些处理程序和可运行对象 Need han
  • 迭代器后继者

    我想用另一个迭代器 同类 的后继者初始化一个迭代器 任意类型 以下代码适用于随机访问迭代器 但不适用于前向或双向迭代器 Iterator i j 1 一个简单的解决方法是 Iterator i j i 但这不起作用初始化语句for 循环的
  • Java LinkedList ListIterator 行为

    我正在 java util LinkedList 上使用 java util ListIterator 期望它像以下伪代码一样工作 list 1 2 3 4 iterator next should be 1 iterator next s
  • 区分映射和集合的模板

    在创建代码时common for set unordered set map and unordered map 我需要几种方法 其中处理实际上是不同的 我的问题是让编译器推断出要使用哪个实现 考虑这个例子 include
  • 来自嵌套列表的嵌套字典

    我有嵌套列表 例如 A A1 A1 B C B B1 B2 B1 b1 b2 b3 B2 d1 d2 d3 d4 C C1 C2 C3 C1 a1 a2 a3 C2 n1 n2 n3 n4 C3 x1 x2 x3 x4 我想创建嵌套字典 例
  • 与 data.frame 长度不等的字符向量列表

    我有一个如下所示的命名列表 gt head pathways
  • 是否可以将 ComboBox DisplayMember 设置为列表中对象的属性?

    我有一个正在填充的 ComboBox 其中 ComboBox Items 中的每个对象都是对象列表 目前 组合框为每个项目显示 集合 是否可以让组合框显示列表中包含组合框项目的第一个对象的成员 我目前正在通过以下内容填充组合框项目 fore
  • 非成员规则在 Prolog 中无法按预期工作

    我正在尝试在 Prolog 中创建一个迷宫程序 其目的是找到一条从迷宫起点到迷宫中心点 m 的路线 迷宫由使用四种颜色之一连接的正方形组成 蓝色 绿色 紫色或橙色 从起点到中心的路线遵循四种颜色的重复图案 我创建了以下代码 link2 A
  • 在列表列表中查找匹配值

    我正在尝试迭代 python 2 7 5 中的列表列表 并返回在第二个列表中找到第一个值的列表 如下所示 python 2 7 5 list1 aa ab bb bc cc list2 aa 1 3 7 de 2 2 1 bc 3 4 4
  • 通过列表搜索

    我一直在尝试定义一个函数 给定一个整数列表和一个整数 n 返回一个布尔值 指示 n 是否在列表中恰好出现一次 我有这个 但它不起作用 我无法弄清楚 once a gt a gt Bool gt Bool filter filter p x
  • 获取数据框列表并按变量分组,然后使用该变量作为字典的键

    我对 python 编程比较陌生 我有一个 pandas 数据框列表 其中都有 年份 列 我试图按该列进行分组并转换为字典 其中字典键是变量 年份 值是该年的数据帧列表 这在Python中可能吗 我试过这个 grouped dict lis
  • 如何将 FOR AUTO XML 结果插入表中?

    我已经使用从表中检索了值 select from tableABC for xml auto elements 现在 有这个精确的表tableABC在另一台服务器上 我需要将这些检索到的值插入其中 如何实现这一目标 测试表及数据 creat
  • C++ STL 下一个排列与组合

    我知道我可以使用std next permutation在包含元素的某些容器上 1 2 3 这将生成该序列的 6 种排列 我想做的是给定一些设置 1 2 3 4 5 6 生成大小为 3 的所有可能的排列 因此对于这个例子 4 3 2 将是由
  • 枚举列表中的列表

    我有一个约会 并记录了那天发生的事件 我想枚举显示日历的日期的事件列表 我还需要能够从列表中删除事件 def command add date event calendar if date not in calendar calendar
  • python中根据变量类型处理数据子集

    我将以下数据存储在 csv df sample csv 中 我将列名放在名为 cols list 的列表中 df 数据 样本 df data sample pd DataFrame new video BASE SHIVER PREFER
  • 在 WPF FlowDocument 中的指定位置插入超链接

    我想以编程方式将 WPF 超链接元素插入 FlowDocument 中 目标是创建一个工具栏按钮 该按钮将获取 RichTextBox 中的一系列文本并将其替换为超链接 它与您在网络上看到的用于在 wiki 或博客 或 StackOverf
  • 执行 set_difference 时出错:变量结果不是结构

    我在函数外部全局声明了一个设置变量 std set
  • 以字符集安全的方式获取 Windows 上的进程列表

    这个帖子 https stackoverflow com questions 54686 how to get a list of current open windows process with java给出了一个在 Windows 下
  • 从列表中删除元素的最佳方法

    我想知道从列表中删除元素的最佳方法 有效方法是什么 有功能很少 https docs python org 3 tutorial datastructures html more on lists由Python提供 some list re
  • 使用带有 Razor Pages 的复选框列表作为数据库的输入

    我希望表单中的输入之一来自用户选择的复选框列表 我已经研究了几个小时了 但我仍然不明白我需要为此做什么 为什么 MVC 在这个主题上有如此多的帮助 而 Razor 却几乎没有 cshtml

随机推荐