- 博客(36)
- 问答 (1)
- 收藏
- 关注
转载 关于fork 的一个小问题
首先看一个程序:题目:请问下面的程序一共输出多少个“-”?#include #include #include int main(void){ int i; for(i=0; i<2; i++){ fork(); printf("-"); } wait(NULL); wait(NULL); return 0;
2015-03-31 19:57:52 814
原创 Nginx 的基本数据类型
本节介绍了 Nginx 对基本数据的一种封装,包括基本整型数据类型、字符串数据类型、缓冲区类型以及 chain 数据类型。1、基本数据类型整型数据/* 基本数据结构 */ /* Nginx 简单数据类型 */ /* 在文件 src/core/ngx_config.h 定义了基本的数据映射 */ typedef intptr_t ngx_
2015-03-27 21:39:54 1349
转载 C语言 - 结构体所占字节数
在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: 1)某些平台只能在特定的地
2015-03-23 13:58:46 17144 3
原创 STL源码剖析 - 第6章 算法 - 6.7.10 - 6.7.11 equal_range 和 inplace_merge
6.7.10、 equal_range(应用于有序区间) 查找区间与value相等的相邻重复元素的起始位置和结束位置 ,返回pair,前一个迭代器是lower_bound作用的返回值,后一个迭代器是uper_bound作用的返回值。lower_bound和uper_bound参考:http://blog.csdn.net/u012243115/article/details/4441
2015-03-20 14:40:56 485
原创 STL源码剖析 - 第6章 算法 - 6.7.9 sort(排序算法)
6.7.9 sort STL的所有关系型容器(set,map,multiset……)都拥有自动排序功能(底层结构采用RB-tree),不需要sort算法。序列式容器stack、queue和priority-queue不允许排序。剩下的vector、deque和list,前两个适合使用sort排序,list迭代器不属于随机存取迭代器,不适合使用sort排序。 STL的so
2015-03-19 16:36:42 677
原创 STL源码剖析 - 第6章 算法 - 6.7.8 部分元素排序算法
6.7.8 partial_sort, partial_sort_copy重新安排序列[first,last),使序列前半部分middle-first个最小元素以递增顺序排序,并将其置于[first,middle),相对于sort排序算法,只排序middle-first个元素,使用堆效率更高 ,其余last-middle个元素不指定任何排序,并将其置于[middle,last) 。注意
2015-03-19 16:24:52 458
原创 STL源码剖析 - 第6章 算法 - 6.7.5 - 6.7.6 排列组合算法
6.7.5、next_permutation获取[first,last)区间所标示序列的下一个排列组合,若果没有下一个排序组合,则返回false;否则返回true; /* 函数功能:Rearranges the elements in the range [first,last) into the next lexicographically greater permutation.
2015-03-18 16:46:21 397
原创 STL源码剖析 - 第6章 算法 - 6.7.2 - 6.7.4 二分算法
6.7.2 、low_bound(应用于有序区间)//在已排序区间[first,last)查找value值 //若该区间存在与value相等的元素,则返回指向第一个与value相等的迭代器 //若该区间不存在与value相等的元素,则返回指向第一个不小于value值的迭代器 //若该区间的任何元素都比value值小,则返回last // Binary search (low
2015-03-18 16:42:50 544
原创 STL源码剖析 - 第6章 算法 - 6.7.1 数据处理算法 - 三
1、 replace//将区间[first,last)内的所有old_value都以new_value替代. template void replace(_ForwardIter __first, _ForwardIter __last, const _Tp& __old_value, const _Tp& __new_value) { __ST
2015-03-18 16:04:16 469
原创 STL源码剖析 - 第6章 算法 - 6.7.1 数据处理算法 - 二
1、 for_each将仿函数f施行于区间内的每一个元素上,但f不能改变元素的内容// for_each. Apply a function to every element of a range. //功能:Applies function fn to each of the elements in the range [first,last). //将仿函数f应用于[fir
2015-03-18 14:46:24 509
原创 STL源码剖析 - 第6章 算法 - 6.7.1 数据处理算法 - 一
6.7.1 单纯的数据处理1、adjacent_find//查找区间[first,last)内第一次重复的相邻元素 //若存在返回相邻元素的第一个元素位置 //若不存在返回last位置 /*该函数有两个版本:第一版本是默认操作operator==;第二版本是用户指定的二元操作pred 函数对外接口的原型: equality (1):默认操作是operator==
2015-03-17 17:25:32 477
原创 STL源码剖析 - 第6章 算法(algorithms) - set相关算法
6.5 set相关算法 本节介绍set集合的相关算法,分别是并集set_union,交集set_intersection,差集set_difference,和对称差集set_symmetric_difference,这四个函数都提供了两个版本的函数原型:第一个版本是采用默认的排序比较方式operator接受的输入区间都是有序的(set内的元素默认有序,可接受multiset容器作为输入区
2015-03-17 16:32:40 519
原创 STL源码剖析 - 第6章 算法(algorithms) - 基本算法<stl_algobase.h>
6.4 基本算法 STL标准规格中并没有区分基本算法或复杂算法,然而SGI却把常用的一些算法定义于中,其他算法定义于中。这些常用的算法包含equal,fill,fill_n,iter_swap,lexicographical_compare,max,min,mismatch,swap,copy,copy_backward,copy_n。其中一个比较重要的算法就是copy,针对copy的剖
2015-03-17 15:28:33 579
原创 STL源码剖析 - 第6章 算法(algorithms) - 数值算法<stl_numeric.h>
6.3 数值算法 本节介绍的数值算法是在源码SGI STL中的文件,具体功能详见下面的源码剖析,在源码剖析的时候,针对每个元素都给出了使用例子,这样可以增加对其理解。numeric数值算法源码剖析#ifndef __SGI_STL_INTERNAL_NUMERIC_H#define __SGI_STL_INTERNAL_NUMERIC_H__STL_BEGIN_NAMESPA
2015-03-17 15:02:01 489
原创 STL源码剖析 - 第5章 关联式容器 - hash_multimap
5.11 hash_multimap hash_multimap和hash_map的区别就像multimap与map的区别一样,hash_multimap的底层机制是基于hashtable,它可以存在重复的键值,所以插入函数使用insert_equal(),hash_multimap和hash_map一样,容器的内容不自动排序。本文源码出自SGI STL的文件。hash_mul
2015-03-13 16:09:54 651
原创 STL源码剖析 - 第5章 关联式容器 - hash_multiset
5.10 hash_multiset hash_multiset和hash_set的区别就像multiset与set的区别一样,hash_multiset的底层机制是基于hashtable,它可以存在重复的键值,所以插入函数使用insert_equal(),hash_multiset和hash_set一样,容器的内容不自动排序。本文源码出自SGI STL的文件。hash_mul
2015-03-13 16:06:09 451
原创 STL源码剖析 - 第5章 关联式容器 - hash_map
5.9 hash_map hash_map以hash table为底层机制,和map类似,每一个元素都同时拥有一个实值和一个键值,但是不同点是hash_map容器中的元素是没有排序的,因为hash table没有提供排序功能。本文源码出自SGI STL的文件。 hash_map源码剖析#ifndef __SGI_STL_INTERNAL_HASH_MAP_H#def
2015-03-13 16:05:15 452
原创 STL源码剖析 - 第5章 关联式容器 - hash_set
5.8 hash_set hash_set以hashtable为底层机制。和set类似,hast_set的键值就是实值,实值就是键值,但是不同点是hash_set容器中的元素是没有排序的,因为hash table没有提供排序功能。hash_set的使用方式与set完全相同。本文源码出自SGISTL的文件。hash_set容器源码剖析#ifndef __SGI_STL_INTERNA
2015-03-13 15:56:37 466
原创 STL源码剖析 - 第5章 关联式容器 - hashtable
5.7 hashtable前面介绍的关联容器set、multiset、map和multimap的底层机制都是基于RB-Tree红黑树,虽然能够实现在插入、删除和搜索操作能够达到对数平均时间,可是要求输入数据有足够的随机性。本文介绍的hashtable不需要要求输入数据具有随机性,在插入、删除和搜索操作都能达到常数平均时间。本文介绍的hash table是来自SGI STL中的文件,在这里为
2015-03-13 15:38:09 468
原创 STL源码剖析 - 第5章 关联式容器 - multimap
5.6 multimap multimap的特性及其用法和map完全相同,唯一的区别就是multimap允许键值key重复,因此multimap的插入操作采用的是底层RB-Tree的insert_equal()而非insert_unique()。本文的源码出自SGISTL中的文件。#ifndef __SGI_STL_INTERNAL_MULTIMAP_H#define __
2015-03-13 14:08:15 499
原创 STL源码剖析 - 第5章 关联式容器 - multiset
5.5 multiset multiset的特性及其用法和set完全相同,唯一的区别就是multiset允许键值key重复,因此multiset的插入操作采用的是底层RB-Tree的insert_equal()(可以插入重复的键)而非insert_unique()。本文的源码出自SGI STL中的文件。#ifndef __SGI_STL_INTERNAL_MULTISET_
2015-03-13 14:05:16 457
原创 STL源码剖析 - 第5章 关联式容器 - map
5.4 map 在SGI STL中的容器map,底层实现机制是RB-Tree,是因为map的操作RB-Tree都能实现。在map容器键值key和实值value是不相同的,键值key和实值value的比较函数也是不同的。在map容器里面的元素是根据元素的键值自动排序的,不能修改map容器的键值,但是可以修改容器的实值。map的所有节点元素都是pair。pair有两个成员变量first,s
2015-03-12 16:36:26 566
原创 STL源码剖析 - 第5章 关联式容器 - set
5.3 set 在SGI STL中的容器set,其实现基本上是在RB-Tree的基础上,以RB-Tree作为其底层的实现机制,几乎所有的set操作行为,都只是转调用RB-tree的操作行为而已。在set容器中键值key和实值value是相同的,且在容器里面的元素是根据元素的键值自动排序的,同时我们不能修改set容器里面的元素值,所以set的迭代器是采用RB-Tree的const_it
2015-03-12 16:03:31 515
原创 STL源码剖析 - 第5章 关联式容器 - RB-tree(红黑树)
5.1 树的导览 标准的STL关联式容器分为set(集合)和map(映射表)两大类,以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表)。这些容器的底层机制均以RB-tree(红黑树)完成。RB-tree也是一个独立的容器,但并不开放给外界使用。此外,SGI STL还提供了一个不在标准规格之列的关联式容器:hash table(散列表),以及以此hash
2015-03-12 15:37:00 640
原创 STL源码剖析 - 第4章 序列式容器 - ilist
4.9.1 slist概述 在STL标准中提供了双向链表list,本文介绍的是SGISTL中定义的单向链表slist。单向链表的迭代器是属于正向迭代器,所以在单链表进行插入元素时,在指定节点之后插入时时间是常数O(1),在指定节点之前插入时需要线性时间O(n)。相比于双向链表list,它所耗用的空间更小,某些操作更快。slist和list有一个共同的特殊是:它们的插入,移除,拼接等操作不
2015-03-11 15:44:14 421
原创 STL源码剖析 - 第4章 序列式容器 - priority_queue
4.8.1 priority_queue概述 priority_queue(优先队列)是拥有优先级的queue,不过它容器内的元素并不是根据加入顺序排列,而是根据用户定义的优先级进行排列。priority_queue只能在队列尾部加入元素,在头部取出元素。不能遍历容器,因此不需要自己设置迭代器。在SGI STL的源码的class priority_queue设计中,它是基于某种容
2015-03-11 14:57:29 455
原创 STL源码剖析 - 第4章 序列式容器 - heap
4.7.1 heap概述 在STL中,heap并不是一种容器,而是一种算法,作为下一节的priority queue的助手,任何能够提供随机访问迭代器的容器都能支持heap的操作。heap不需要遍历内容,所以没有属于自己的迭代器。本文介绍的heap是基于vector容器的操作;有关堆的定义可以参考:http://blog.csdn.net/u012243115/article/detai
2015-03-11 14:32:08 534
原创 STL源码剖析 - 第4章 序列式容器 - queue
4.6.1 queue概述 queue是一种“先进先出”的数据结构,可以对两端进行操作,但是只能在队列头部进行移除元素,只能在队列尾部新增元素,可以访问队列尾部和头部的元素,但是不能遍历容器,所以queue不需要设计自己的容器。在SGI STL的源码的class queue设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型。4.6
2015-03-10 16:33:40 473
原创 STL源码剖析 - 第4章 序列式容器 - stack
4.5.1 stack概述 stack是一种“先进后出”的数据结构,它只能在栈顶对数据进行操作,即只能在栈顶进行新增元素、移除元素、取得最顶端元素。不能进行遍历行为,所以不需要设计自己的迭代器。在SGI STL的源码的设计中,它是基于某种容器作为底部结构的,默认容器是deque容器,用户也可以自己指定容器的类型,比如list或者vector。4.5.2 stack容器配接器
2015-03-10 15:38:43 494
原创 STL源码剖析 - 第4章 序列式容器 - deque
4.4.1 deque概述 deue是一种双向开口的分段连续线性空间,可以在头尾端进行元素的插入和删除。 deque和vector最大的差异就是:第一是deque允许于常数时间内对头端进行插入或删除元素;第二是deque是分段连续线性空间,随时可以增加一段新的空间;deque不像vector那样,vector当内存不够时,需重新分配/复制数据/释放原始空间;不过dequ
2015-03-10 15:10:25 594
原创 STL源码剖析 - 第4章 序列式容器 - list
4.3.1 list概述 在SGI STL中,list容器是一个循环的双向链表,它的内存空间效率较前文介绍的vector容器高。因为vector容器的内存空间是连续存储的,且在分配内存空间时,会分配额外的可用空间;而list容器的内存空间不一定是连续存储,内存之间是采用迭代器或节点指针进行连接,并且在插入或删除数据节点时,就配置或释放一个数据节点,并不会分配额外的内存空间,这两个操作过程
2015-03-08 17:07:25 551
原创 C程序内存相关知识点
c 内存分配1、程序代码区:存放函数体的二进制代码。 2、全局区数据区:全局数据区划分为三个区域。 全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。常量数据存放在另一个区域里。这些数据在程序结束后由系统释放。我们所说的BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量
2015-03-07 21:22:42 453
原创 C语言程序的内存分布
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。1.C程序结构下面列出C语言可执行程序的基本情况(Linux 2.6环境/GCC4.0)。[root@localhost Ctest]# ls test-l //test为一个可执行程序-rwxr-xr-x 1
2015-03-07 20:43:00 637
原创 STL源码剖析 - 第4章 序列式容器 - vector
4.2 vector容器 在STL编程中,我们最常用到的就是容器,容器可分为序列容器和关联容器;本文记录的是我们经常使用的序列容器之vector,vector的数据安排和操作方式类似于C++内置数组类型array,唯一的区别就是在于空间的灵活运用。内置数组array是静态空间,一旦分配了内存空间就不能改变,而vector容器可以根据用户数据的变化而不断调整内存空间的大小。
2015-03-07 15:45:24 644
原创 STL源码剖析 - 第3章 迭代器的概念与traits编程技法
在STL编程中,容器和算法是独立设计的,即数据结构和算法是独立设计的,连接容器和算法的桥梁就是迭代器了,迭代器使其独立设计成为可能。Traits编程技术是STL中最重要的编程技术,Traits可以获取一个类型的相关信息。3.4 Traits编程技术 Traits可以获取一个类型的相关信息,首先我们看下面的程序:template void function(T
2015-03-07 13:55:13 525
原创 STL源码剖析 - 第2章 空间配置器
SGI STL源码下载地址 空间配置是为存储数据提供可用的空间,在Standard Template Library(STL)中,空间配置是最底层的东西,为容器提供服务。2.1 空间配置器的标准接口 空间配置器(Allocator)的主要实现文件是alloc.h和stl_alloc.h,标准接口位于文件stl_alloc.h的588-628行;具体如下:/*tih
2015-03-05 20:40:50 592
空空如也
关于fork和cout<<'\n'的一个问题
2015-04-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人