- 博客(8)
- 收藏
- 关注
stl deque源码学习笔记
1.deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素比vector 更有效。2.deque的size()函数是常量级的:...
2012-09-04 09:24:56
152
stl list源码学习笔记
1.list中有一个unique函数,这个函数容易给人造成一种错觉:直接调用它就可以移除list中的重复元素。其实不然,unique函数实现如下:[code="c++"]template void list::unique() { iterator first = begin(); iterator last = end(); if (first...
2012-08-30 14:51:45
160
stl vector源码学习笔记
1.vector中的size()方法是常数量级的,其中 0 == size()和empty()是等价的;[code="c++"] size_type size() const { return size_type(end() - begin()); }[/code][code="c++"] bool empty() const { return begi...
2012-08-29 17:13:49
236
原创 如何判断文本是否是UTF8编码
UTF8格式的文本开头的三个字节是-17、-69和-65,主要读取文件或流的前三个字节,然后比对即可:[code="java"] /** * @param byte0 the first byte of file(or stream) * @param byte1 the second byte of file(or stream) * @param byte2 the ...
2012-08-27 16:44:10
457
原创 边界检查函数checkBounds
今天在看java.nio.Buffer的源码时,看到这样一个函数:[code="java"] static void checkBounds(int off, int len, int size) { if ((off | len | (off + len) | (size - (off + len))) < 0) throw new IndexOut...
2012-08-27 14:12:36
1822
原创 BufferedInputStream中的fill函数
BufferedInputStream内用有一个很重要的private函数fill(),这个函数的原型如下:[code="java"] private void fill() throws IOException { byte[] buffer = getBufIfOpen(); if (markpos = buffer.length) /* n...
2012-08-24 16:59:44
478
FutureTask进入完成状态,会永远停止在这个状态
今天在使用ScheduledExecutorService的时候,发现scheduleWithFixedDelay和scheduleAtFixedRate的参数都是Runnable,于是想到使用FutureTask封装一下:FutureTask<String> task = new FutureTask<String>(new ComputeTask(1000)...
2012-08-23 13:56:26
663
原创 n+1个范围是0~n的数字,找出所有重复的数字,O(n)基础上不用额外空间
n+1个范围是0~n的数字,找出所有重复的数字,O(n)基础上不用额外空间。算法思想:使用数组的值对应数组的下标,出现多对一的则说明重复。算法: 遍历数组,每次访问前判断数组是否访问过(访问过的会被置为负数); 如果没访问过,则以当前数组的值为数组下标,访问其值: 若为负数,则此元素被访问过,即数组下标在数组值中多次出现,重...
2012-08-21 17:08:10
567
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人