[stl源码] 链表的逆
来源:互联网 发布:织梦if判断 编辑:程序博客网 时间:2024/05/24 03:11
实现过程如下
/* by pjzero */template<typename iter>void pj_reverse(iter iter_beg, iter iter_end){ if(iter_beg == iter_end) return; --iter_end; while (iter_beg < iter_end) { swap(*iter_beg, *iter_end); ++iter_beg; --iter_end; }}
stl 源码调用过程比较复杂,实现过程和上面的一样,在这里也贴出来吧:
template<typename _RandomAccessIterator> void __reverse(_RandomAccessIterator __first, _RandomAccessIterator __last, random_access_iterator_tag) { if (__first == __last) return; --__last; while (__first < __last) { std::iter_swap(__first, __last); ++__first; --__last; } }
源代码中的std::iter_swap(__first, __last)函数实现如下:
template<typename _ForwardIterator1, typename _ForwardIterator2> inline void iter_swap(_ForwardIterator1 __a, _ForwardIterator2 __b) { // 省略了c++版本的不同实现, swap(*__a, *__b); }
Method 2
第二种实现,利用但链表建表时候的头插法来实现;
这里给出头插法建表的c代码(有头节点);
typedef int ElemType;typedef struct DNode { ElemType data; struct DNode *prior; struct DNode *next;} DNodeList;void CreateListF(DNode *&l, ElemType a[], int n) { DNode *s; int i; l = (DNode *) malloc(sizeof(DNode)); l->next = NULL; for (i = 0; i < n; i++) { s = (DNode *) malloc(sizeof(DNode)); s->data = a[i]; s->next = l->next; l->next = s; }}
过程收获
list 在c++中是双向链表,以后有时间再来好好总结一下;
vector迭代器最后一个元素的内容永远是0啊;
int src[] = {1, 2, 3};
vector data(src, src+3);
cout << *data.end() << endl; # output: 0
0 0
- [stl源码] 链表的逆
- STL源码-traits的使用
- STL::vector的源码学习
- STL源码-内存的分配
- STL源码剖析——单向链表slist
- STL源码剖析 -- STL Alloc 的allocate和construct
- 《STL源码剖析》学习--STL体现的思想
- 《STL源码剖析》STL的双层配置器
- STL的vector的源码实现
- STL源码剖析(5) -- 堆栈的使用
- STL中string的源码解读
- STL源码剖析中 traits的使用
- STL中string的源码解读
- 读stl源码解析的感悟(2)
- 《STL源码剖析》deque的实现
- 【STL源码剖析】令人困惑的语法
- STL源码剖析 deque的中控器
- STL的lower_bound和upper_bound源码
- SQL Server 和 Oracle 以及 MySQL 有哪些区别?
- 赫夫曼编码
- 常用端口号与对应的服务以及端口关闭
- PHP---分层模式和mvc模式
- spring boot学习
- [stl源码] 链表的逆
- JPA注解项目开发总结
- html5 viewport之我见
- Crawler For LeetCode
- Android简易录像机
- codeforces R#384 A\B\C
- Ajax、json,原生JS和JQ使用Ajax
- 端口占用问题解决的小技巧
- ARM寻址方式