- 浏览: 13503 次
- 性别:
- 来自: 北京
最新评论
-
巴巴米:
xinyiwust 写道巴巴米 写道看了半天才发现是c++,我 ...
stl list源码学习笔记 -
sdujq:
巴巴米 写道看了半天才发现是c++,我说我怎么没见过uniqu ...
stl list源码学习笔记 -
xinyiwust:
巴巴米 写道看了半天才发现是c++,我说我怎么没见过uniqu ...
stl list源码学习笔记 -
巴巴米:
看了半天才发现是c++,我说我怎么没见过unique这个函数
stl list源码学习笔记
文章列表
1.deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素比vector 更有效。
2.deque的size()函数是常量级的:
size_type size() const { return _M_finish - _M_start; }
3.与vector相比较,deque没有内存再分配的消耗(vector在内存不够时会调 ...
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 != la ...
1.vector中的size()方法是常数量级的,其中 0 == size()和empty()是等价的;
size_type size() const
{ return size_type(end() - begin()); }
bool empty() const
{ return begin() == end(); }
2.构造函数,若采用默认构造函数,vector的容量为0,在容量不足的情况下会以1、2、4...指数级的增长;如果指定容量和初始值,则构建指定长度和初始值的容器,当容量不足时,将容量翻倍。
#include<iostrea ...
UTF8格式的文本开头的三个字节是-17、-69和-65,主要读取文件或流的前三个字节,然后比对即可:
/**
* @param byte0 the first byte of file(or stream)
* @param byte1 the second byte of file(or stream)
* @param byte2 the third byte of file(or stream)
* @return return true if file(or stream) is coded by UTF8,else return false
*/
...
今天在看java.nio.Buffer的源码时,看到这样一个函数:
static void checkBounds(int off, int len, int size) {
if ((off | len | (off + len) | (size - (off + len))) < 0)
throw new IndexOutOfBoundsException();
}
这是一个边界检查函数,感觉写的非常简洁,只要满足如下条件就抛出IndexOutOfBoundsException:
off<0或者len<0或者off+ ...
BufferedInputStream内用有一个很重要的private函数fill(),这个函数的原型如下:
[code="java"] private void fill() throws IOException {
byte[] buffer = getBufIfOpen();
if (markpos = buffer.length) /* no room left in buffer */
if (markpos > 0) { /* can throw away early part of the buff ...
今天在使用ScheduledExecutorService的时候,发现scheduleWithFixedDelay和scheduleAtFixedRate的参数都是Runnable,于是想到使用FutureTask封装一下:FutureTask<String> task = new FutureTask<String>(new ComputeTask(1000));
接着在调用scheduleWithFixedDelay的时候就出现错误了,发现call函数只执行了一次,然后就卡住了。。。
随后查看了一下FutureTask的源码,发现执行完 ...
n+1个范围是0~n的数字,找出所有重复的数字,O(n)基础上不用额外空间。
算法思想:
使用数组的值对应数组的下标,出现多对一的则说明重复。
算法:
遍历数组,每次访问前判断数组是否访问过(访问过的会被置为负数);
如果没访问过,则以当前数组的值为数组下标,访问其值:
若为负数,则此元素被访问过,即数组下标在数组值中多次出现,重复;
若非负,则此元素没被访问过,将其标记为访问过(取负值,0取数组长度的负 值);
如果访问过(访问过的数为负数),则再取负为数组下标(如果是数组长度,表明是0),访问其值:
...