1.list中有一个unique函数,这个函数容易给人造成一种错觉:直接调用它就可以移除list中的重复元素。其实不然,unique函数实现如下:
template <class T, class Alloc>
void list<T, Alloc>::unique()
{
iterator first = begin();
iterator last = end();
if (first == last) return;
iterator next = first;
while (++next != last)
{
if (*first == *next)
erase(next);
else
first = next;
next = first;
}
}
由代码可知,unique函数只能移除相邻的重复结点,故若要移除list中重复的节点,应该先排序(sort),然后再调用unique。
2.list的size()函数的时间复杂度是o(n),这一点要尤其注意,判断list是否为空的时候应该使用empty()而不是0 == size()。empty()的代码如下:
bool empty() const { return node->next == node; }
size()的代码如下:
size_type size() const
{
size_type result = 0;
distance(begin(), end(), result);
return result;
}
其中的distance的源码如下:
template <class _InputIterator, class _Distance>
inline void __distance
(_InputIterator __first,
_InputIterator __last,
_Distance& __n,
input_iterator_tag)
{
while (__first != __last) { ++__first; ++__n; }
}
template <class _RandomAccessIterator, class _Distance>
inline void __distance
(_RandomAccessIterator __first,
_RandomAccessIterator __last,
_Distance& __n,
random_access_iterator_tag)
{
__n += __last - __first;
}
template <class _InputIterator, class _Distance>
inline void distance
(_InputIterator __first,
_InputIterator __last,
_Distance& __n)
{
__distance(__first, __last, __n, iterator_category(__first));
}
从
while (__first != __last) { ++__first; ++__n; }
中可以看出,其时间复杂度确实是o(n)。至于size()为什么要这样写,请参考:
http://hi.baidu.com/acojvbqaknbgmud/item/c4c1d0c55d5b7629ef466525.
3.要注意list的成员函数remove_if和stl提供的泛型算法remove_if的区别,具体请参考
http://blog.csdn.net/steven_wang787/article/details/4513121。
分享到:
相关推荐
STL经典著作的读书笔记。按章节写的,算是一份不错的总结吧
stl 笔记 笔记描述 SGI STL 源码阅读笔记5 隐式类型转换总结.docx
C++课堂源码与笔记,需要的朋友请自行下载,如果有C++编程基础的朋友,可以配合视频教程,参考学习。
最新的STL源码,最新的STL源码,最新的STL源码
stl源码剖析stl源码剖析stl源码剖析stl源码剖析stl源码剖析stl源码剖析stl源码剖析
关于学习C++《STL模板库》以及学习《STL源码剖析》的学习笔记。
完整的STL学习笔记,可以作为参考,适合初学者使用
STL英文的网页形式的,附带源码
STL源码剖析 STL源码剖析 STL源码剖析 STL源码剖析 STL源码剖析 STL源码剖析 STL源码剖析
不用多说了,经典的STL学习书籍;想学习STL的可以看看这本书,但是如果只是用用,倒也不用深入学习这个,毕竟太复杂了
STL源码剖析.pdf
c++ stl list总结
STL源码剖析高清PDF电子书,作者侯捷,C++泛型变成经典书籍
心希盼 c++ STL 单链表源码 主要仿照STL封装了单链表 包括 它的迭代器 详细请看“心希盼 List.doc”文件
本文档展示了STL List的基本操作方法,希望对学C++的人有些帮助
1.由于HPE收购了SGI,所以官网已无法下载SGI STL源码。2.Ubuntu16.04自带glibc版本是2.23
侯捷 版本 STL源码剖析 C++ 学习不二经典 学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。 这本书...
《算法笔记》上C++的STL相关知识的整理,供大家参考。最近在准备PAT相关的考试,发现基本功还有所欠缺,所以系统学习了一些知识,这是部分,上传供大家参考。
包含STL的源码, 侯杰的《STL源码剖析》一书做过介绍,可以结合着看, 对学习C++ STL很有帮助..
这个学习笔记很不错的,能够让你在短时间内掌握stl,比一般的书籍上面要精辟易懂,个人觉得总结得很不错的。建议学C++的可以看看。