`

linxu(C)的链表风格封装 VS STL中的迭代器

阅读更多

起因是因为今天组里有个同事在设计链表erase接口的时候出了点问题。不敢说哪种好哪中坏,先贴代码比较下:遍历删除。


linux下的

list_for_each_safe(p, listhead...)  //p是迭代节点,listhead表示要遍历的节点头
{
    if( ..... )
    {
         list_delete(p);
    }
   
}
 

stl下的

      std::list< int> List;
      std::list< int>::iterator itList;
      for( itList = List.begin(); itList != List.end(); )
      {
            if( WillDelete( *itList) )
            {
               itList = List.erase( itList);
            }
            else
               itList++;
      }
 

今天同事在设计erase接口的时候,由于考虑到了遍历删除,所以返回下一个节点出了点问题。通过比较两者代码会发现,STL对erase进行了封装,用户在使用的时候,必须遵循erase的规则来叠加。而linux的代码封装的是for()这个过程,用户下一回仍然可以使用p,而不用做什么其他的操作,就跟普通的遍历一样,不会因为有删除动作而改变循环的流程。当然,它的技巧很聪明,

#define list_for_each_safe(pos, n, head) \
	for (pos = (head)->next, n = pos->next; pos != (head); \
		pos = n, n = pos->next)

 

从这点上来说,我更喜欢linux。所谓简单的代码以点都不简单,并不是因为设计简单了代码就简单,反而是很聪明。

1
0
分享到:
评论

相关推荐

    STL的List链表自行实现

    C++中STL的List链表容器的自行实现,自行实现迭代器、类、封装函数等

    c.STL 学习c语言的必看

    根据提供的文件信息,标题与描述均提到了“c.STL 学习c语言的必看”,这表明文章的主题是关于C++标准模板库(STL)在C语言学习中的重要性,尽管C语言本身并不支持STL,但此处应当理解为C++语言的学习资料。...

    stl速成 基本的stl操作

    迭代器的创建方法有多种,程序可能把迭代器作为一个变量创建,或者STL容器类可能为了使用一个特定类型的数据而创建一个迭代器。作为指针,必须能够使用*操作符类获取数据。你还可以使用其他数学操作符如++。典型的,...

    STL源码剖析.简体中文 PDF

    2. **迭代器**:迭代器是STL中的重要概念,它像指针一样用于遍历容器中的元素,但具有更丰富的操作,如递增、递减、访问元素等。迭代器提供了统一的接口,使得算法可以独立于具体容器类型而工作。 3. **算法**:STL...

    关于STL的ppt

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、灵活的容器、算法和迭代器等组件,极大地提高了程序员的开发效率。在这个关于STL的PPT中,我们可以期待深入...

    STL.rar_hash stl_stl 封装_搜索树

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它为程序员提供了大量的高效、可重用的容器、迭代器、算法和函数对象。在这个名为"STL.rar_hash stl_stl 封装_搜索树"的...

    gdb中查看stl容器命令封装脚本

    对于STL容器,直接使用GDB默认的`print`或`display`命令可能无法得到理想的输出格式,因为它们通常会显示底层的迭代器或指针,而不是容器内的元素。 为了更直观地查看STL容器,我们可以编写自定义的GDB命令。在....

    C/C++/STL/數據結構/LINUXC編程實例

    在C++中,STL是一个库,包含了一系列模板类和函数,提供了容器(如vector、list、set等)、迭代器、算法和内存管理工具,极大地提高了代码的可读性和效率。 数据结构是编程中的核心概念,它涉及到如何组织和管理...

    SGI-STL-code.zip

    同时,SGI STL的迭代器设计巧妙,它封装了对底层容器的访问,实现了对不同类型容器的一致性接口。 侯捷老师的《STL源码剖析》不仅讲解了STL的基本概念,还深入剖析了其内部实现机制,如迭代器的实现原理、容器的...

    stl源码剖析 stl源码剖析

    迭代器分为输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,每种迭代器类型有不同的操作限制。 3. 算法:STL的算法库包含了许多通用的函数,如排序、查找、交换、复制等。这些算法可以作用于任何...

    30分钟学会STL30分钟学会STL

    迭代器在STL中扮演着关键角色,它们定义了容器中元素的范围,并提供了访问和操作元素的方法。迭代器的创建和使用多样,可以作为变量直接创建,也可以由容器类生成。例如,`begin()`和`end()`成员函数常用于获取容器...

    ACM STL的应用

    3. 迭代器的使用:迭代器是STL中用于访问容器内元素的指针类对象,它可以遍历容器中的元素。迭代器的种类包括输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器等。掌握不同迭代器的使用方法,能够...

    C++ STL教程pdf

    3. **迭代器**:迭代器是STL中的重要概念,它是访问容器中元素的一种方式,类似于指针。迭代器提供了一种统一的接口来遍历和操作容器内的元素,无论容器的实现细节如何。有多种类型的迭代器,如输入迭代器、输出迭代...

    stl.rar_STL中文手册

    STL,全称为Standard Template Library(标准模板库),是C++编程语言中不可或缺的一部分,它提供了高效、可重用和泛型的容器、迭代器、算法以及函数对象等组件。STL中文手册作为C++程序员的重要参考资料,可以帮助...

    STL.rar_STL_STL PPT_iterator_stl p

    迭代器是STL的关键特性,它提供了一种抽象的方式来遍历容器中的元素。迭代器有五种类型:输入迭代器、输出迭代器、前向迭代器、双向迭代器和随机访问迭代器,分别对应不同的操作能力和效率。通过迭代器,程序员可以...

    Effective.STL中文

    **STL(Standard Template Library,标准模板库)**是C++编程语言中不可或缺的一部分,它为程序员提供了高效、灵活和可重用的容器、算法和迭代器等工具。`Effective STL`这本书则深入探讨了如何有效地使用这些工具,...

    标准模板库STL

    在STL中,主要包含四大组件:容器、迭代器、算法和函数对象。 **1. 容器** 容器是STL的核心部分,它们是用于存储数据的对象。STL提供了多种不同类型的容器,每种容器都有其特定的用途和性能特性: - **向量...

    STL学习教程word版

    2. **迭代器**:迭代器是STL中的“指针”概念,它可以遍历容器中的元素。迭代器提供了统一的接口,允许我们对不同的容器进行相同的操作,如读取、修改元素或调用算法。有输入迭代器、输出迭代器、前向迭代器、双向...

Global site tag (gtag.js) - Google Analytics