`
xuning2516
  • 浏览: 8096 次
  • 性别: Icon_minigender_1
  • 来自: 江西
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

forward list源码

 
阅读更多

forward_list 源码学习

//forward_list的迭代器是forward_iterator,因此在forward list中需要注意保存前面一个元素的iterator,方便插入和删除。
auto posbefore=flist.before_begin();
for(auto pos=flist.begin();pos!=flist.end();++pos,++posbefore)

例如在remove_if的成员函数 ,删除的是当前元素的后一个元素。

template <class _Tp, class _Alloc> 
template <class _Predicate>
void slist<_Tp,_Alloc>::remove_if(_Predicate __pred)
{
  _Node_base* __cur = &this->_M_head;
  while (__cur->_M_next) {
    if (__pred(((_Node*) __cur->_M_next)->_M_data))
      this->_M_erase_after(__cur);    //删除的是当前元素的下个元素
    else
      __cur = __cur->_M_next;
  }
}
_Slist_node_base* _M_erase_after(_Slist_node_base* __pos)
  {
    _Slist_node<_Tp>* __next = (_Slist_node<_Tp>*) (__pos->_M_next);   //保存当前元素下一个元素的指针,以便删除
    _Slist_node_base* __next_next = __next->_M_next;
    __pos->_M_next = __next_next;
    destroy(&__next->_M_data);
    _M_put_node(__next);
    return __next_next;
 }





分享到:
评论

相关推荐

    c++ ,vs2019, cpp20规范之 forward-list 源码分析

    c++ ,vs2019, cpp20规范之 forward-list 源码分析

    chicken-forward-list:转发列表数据结构

    [wrap-git]directory = chicken-fordward-listurl = https://github.com/chicken-libraries/chicken-fordward-list.gitrevision = main[provide]chicken = chicken_fordward_list_dep 下一步应该是将该包添加到您的...

    AddDateToList_VC++源码_

    "AddDateToList_VC++源码_"这一标题暗示了我们的重点是关于如何将日期或其他数据添加到ListControl中,这在开发Windows应用程序时非常常见。ListControl通常用于显示结构化数据,如表格形式的数据,它可以在对话框、...

    STL源码剖析简体中文版.pdf

    - 前向迭代器(Forward Iterator) - 双向迭代器(Bidirectional Iterator) - 随机访问迭代器(Random Access Iterator) - 每种容器通常提供特定类型的迭代器来访问其内部元素。 #### 四、算法(Algorithms) ...

    RDesktop1.7.0 (源码)

    RDesktop currently runs on most UNIX based platforms with the X Window System, and other ports should be fairly straightforward. RDesktop is released under the GNU Public Licence (GPL), version 3. ...

    ognl源码包值得用一用

    很好的xwork的资源包public void doPost(HttpServletRequest request, HttpServletResponse response) throws ... request.getRequestDispatcher("upload/result3.jsp").forward(request, response);

    struts1.2 from表单提交包含list的对象

    这个Bean应该包含一个List属性,例如`List&lt;Product&gt;`,其中Product是另一个Bean,包含了商品的各个属性。在表单提交后,Struts的默认数据绑定机制会尝试将请求参数自动绑定到ActionForm的属性上。 接着,Action类会...

    STL.rar_STL list pdf

    在这个名为“STL.rar”的压缩包中,包含了关于STL List容器以及迭代器使用的源码示例,旨在帮助开发者深入理解STL List的工作原理和迭代器的运用。 首先,我们来看STL中的List。List是一种双向链表,它允许在任意...

    linux-2.6.28.8 网桥源码部分分析

    `bridge_list`链表则维护了系统中的所有网桥。`bridge_add_dev()`函数用于将一个新的网络接口添加到网桥,而`bridge_del_dev()`负责从网桥中移除接口。这些操作涉及到接口状态的管理和网络流量的重新定向。 网桥的...

    struts tiles实现源码

    - **ActionForward与Tiles定义的映射**:Struts的`ActionForward`可以映射到Tiles定义,这样在Action执行完成后,可以根据Forward直接渲染对应的Tiles页面。 5. **动态内容和参数传递** - **动态属性(Dynamic ...

    visual stdio 2018新版本 c++ stl源码 word文档

    在源码中,可以看到不同类型的迭代器,如input_iterator、output_iterator、forward_iterator、bidirectional_iterator和random_access_iterator,它们分别对应不同的操作能力。迭代器的实现通常涉及指针和虚函数,...

    Struts分页显示源码实例

    ### Struts分页显示源码实例解析 #### 一、背景介绍 在Web应用开发中,特别是使用MVC架构的框架如Struts时,分页显示是常见的需求之一。分页不仅能提高用户体验,还能减轻服务器压力。本文档将详细介绍如何在...

    提交多行数据到Struts的ActionForm的List属性中

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { MyForm myForm = (MyForm) form; List&lt;Item&gt; items = ...

    STL 源码剖析.zip

    - 前向迭代器(Forward Iterator):读写,单向前进,比输入迭代器功能更强。 - 双向迭代器(Bidirectional Iterator):读写,双向前进。 - 随机访问迭代器(Random Access Iterator):提供所有方向的访问,...

    jspjsp基础课程源码

    5. **JSP动作(JSP Actions)**:如`&lt;jsp:include&gt;`, `&lt;jsp:forward&gt;`, `&lt;jsp:param&gt;`等,它们用于动态地插入内容、转发请求或传递参数。 6. **EL(Expression Language)**:一种简洁的表达式语言,用于访问...

    数据结构实验源码及报告

    C++中的`std::list`和`std::forward_list`提供了链表实现。 3. **栈**:是一种后进先出(LIFO)的数据结构,常用于函数调用和表达式求值。C++标准库提供了`std::stack`容器适配器。 4. **队列**:是一种先进先出...

    C++经典趣味编程源码(三个版本txt、word、pdf)

    - 链表:C++标准库中的std::list和std::forward_list。 - 树结构:二叉树、AVL树、红黑树等,通常在STL容器如std::set和std::map中实现。 - 图:虽然C++标准库未直接提供图数据结构,但可以通过自定义结构实现。 ...

    Struts 上传源码

    List&lt;FileItem&gt; items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); // 存储文件到服务器的路径 File...

    一个Struts1多文件上传实例(附Form中传List示例)

    在本文中,我们将深入探讨一个Struts1实现的多文件上传实例,同时也会涉及如何在Form中传递List类型的数据。这个实例对于理解Struts1的请求处理和文件上传机制非常有帮助。 首先,我们需要了解Struts1的ActionForm...

Global site tag (gtag.js) - Google Analytics