自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lanzh_

爱编程,爱生活

  • 博客(41)
  • 问答 (1)
  • 收藏
  • 关注

原创 C++标准库---map&multimap

使用map和multimap需要注意以下几点:1.map和multimap将key/value(键值/实值 对组)当做元素,进行管理。它们可根据key的排序准则自动将元素元素排序。multimap允许重复元素,map不允许。2.map的第一个参数被当做元素的key,第二个参数被当做元素的value,第三个参数用它来定义排序准则。元素的次序由它们的key决定,和value无关。3.map

2014-11-30 20:53:00 2410

原创 C++标准库---set&multiset

一些注意点:1.set和multiset会根据特定的排序准则,自动将元素排序。两者不同之处在于multiset允许元素重复而set不允许。2.排序准则默认缺省为less---为一个仿函数,以operator 对元素进行比较。3.set和multiset不提供用来直接存取元素的任何操作函数,要改变元素值,必须先删除旧元素,再插入新元素。4.set和multiset在元素快速搜寻方面有

2014-11-30 14:43:38 774

原创 C++标准库---仿函数

概念        仿函数(functor),就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了。  有些功能的的代码,会在不同的成员函数中用到,想复用这些代码。                            1)公共的函数,可以,这是一个解决方法,不过函数用到的一些变量,就可能成为公共的全局变

2014-11-29 21:38:58 912

原创 C++标准库---容器、迭代器、算法、仿函数

容器:用来管理某类对象的集合,不同容器有不同的优缺点,所以正确使用不同的容器,可以获得容器带来的各种好处,但是如果使用不正确,就势必会造成很多麻烦,甚至造成错误。迭代器:用来对一个对象群集的所有元素进行遍历动作,所以迭代器是容器的一个很小的接口,利用这个接口,就可以遍历容器内的元素,至于怎么做到遍历元素,应该取决于元素内部存储结构,而不同容器存储结构不同,所以每一种容器都提供了自己的迭

2014-11-29 15:05:09 1445

原创 C++标准库---list使用注意事项

list使用需要注意的几点:1.list不支持随机存取,即如果你要存取第5个元素,你必须顺着串链一一爬过前4个元素,所以在list中随机遍历任意元素,是很缓慢的行为;2.任何位置(不只是两端)执行元素的安插和删除都非常快,始终是常数时间内完成,因为无需移动任何其他元素,实际上内部只是进行了一些指针操作而已;3.安插和删除动作并不会造成指向其他元素的各个pointers,referenc

2014-11-29 14:33:02 2140

原创 C++标准库---deque使用注意事项

deque需要注意的几点:1.两端都能快速安插元素和移除元素,这些操作可以在常数时间内完成;2.deque内部结构会多一个间接过程,存取元素动作会稍微慢一点;3.迭代器需要在不同区块间跳转,所以必须使用特殊的智能型指针,非一般指针;4.duque不支持对容量和内存重分配时机的控制,除了头尾两端,在任何地方安插或删除元素,都将导致指向deque元素的任何references,poin

2014-11-29 13:25:26 2068 1

原创 C++标准库---vector使用注意事项

使用vector需要注意的地方1.vector支持随机存取,因此你只要知道元素的位置,可以在常数时间内存取任何一个元素;2.在末端附加或删除元素,vector的性能相当好,但是在前端或中部安插或删除元素,性能就不行了,因为操作点之后的每一个元素都必须向后移动,而每一次移动都得调用assignment(赋值)操作符;3.合适的vector大小(size)很重要,因为capacity()返

2014-11-29 12:34:41 2941

原创 C++标准库---迭代器

迭代器是一个“可遍历STL容器内全部或部分元素”的对象。

2014-11-24 21:20:01 780

原创 C++标准库---STL三大序列容器vector&deque&list

下面介绍以下STL三大序列容器:vector:

2014-11-23 21:44:14 1425

原创 C++标准库---auto_ptr实现原理

auto_ptr是一个Template class,它的具体实现细节,可以参考以下://auto_ptr实做细目#includeusing namespace std;templateclass my_auto_ptr{private: T* ap;public: typedef T element_type; explicit my_auto_ptr(T* ptr=

2014-11-23 16:35:22 1411 2

原创 C++标准库---const auto_ptr特性

在使用auto_ptr的时候很容易就会发生拥有权的转移,

2014-11-23 14:28:00 913

原创 C++标准库---智能指针auto_ptr初探

智能指针auto_ptrC++标准库ti'go

2014-11-22 21:10:46 833

原创 C++标准库---pair用法及实现

pair的类型:    pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下:    pair p;    pair p;    pair p;也可以将自己写的struct的对象放进去应用:如果一个函数有两个返回值的话,如果是相同类型,就可以用数组返回,如果是不同类型,就可以自己写个str

2014-11-22 16:39:33 11160

转载 304 Not Modified 是什么意思

304 的标准解释是:Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。如果客户端在请求一个文件的时候,发现自己缓存的文件有 Last Modified ,那么在请求中会包含 If Modified Since ,这个时间就是缓存文件的 Las

2014-11-20 13:56:34 13321

原创 C++异常处理机制详细说明

异常处理的一些说明异常处理的语法throw语句的语法:   throw 表达式;try-catch的结构为: try{    被检查的语句;}catch(异常信息的类型[变量名]){    进行异常处理的语句;}说明:1.被检测的部分必须放在try块中,否则不起作用。2.try块和catch块作为一个整体出现,catc

2014-11-19 20:27:35 1318

原创 C++异常处理机制---try&throw&catch

异常处理的方法所谓异常处理指的是对运行时出现的差错以及其他例外情况的处理。在程序设计时,应当事先充分分析程序运行时可能出现的各种意外情况,并且分别制定出相应的处理方法,这就是程序的异常处理的任务。在一个小的程序中,可以用比较简单的方法处理异常,例如用if语句判断除数是否是0,如果是0,则输出一个出错的信息。但是在一个大的系统中,包含许多模块,每个模块又包含许多类和函数,函数

2014-11-19 16:14:27 1505

原创 linux学习之二十六---动态链接库

1.Linux库的概念库是一种软件组建技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,提高程序的编译速度,实现代码重用,使程序易于升级。Windows系统本身提供并使用了大量的库,包括静态链接库(.lib文件)和动态链接库(.dll文件)。类似的,Linux操作系统也使用库。Linux系统中,通常把库文件存放在/usr/lib或/lib目录下。Linux库文

2014-11-17 14:20:01 813

原创 linux学习之二十五---ar的详细解释

1.ar基本用法  ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。  下面是ar命令的格式:  ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive

2014-11-17 11:17:28 816

原创 linux学习之二十四---静态库的创建和使用

库的创建和使用1.Linux库的概念库是一种软件组建技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,提高程序的编译速度,实现代码重用,使程序易于升级。Windows系统本身提供并使用了大量的库,包括静态链接库(.lib文件)和动态链接库(.dll文件)。类似的,Linux操作系统也使用库。Linux系统中,通常把库文件存放在/usr/lib或/lib

2014-11-17 10:46:54 833

转载 linux学习之二十三---共享内存

下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc分配的内存一

2014-11-16 16:25:37 740

原创 linux学习之二十二---命令行参数分析

命令行参数分析在学习命令行参数分析函数之前,我们必须首先理解带参数的main()函数,它的一般形式为:int main(int argc,char **argv)或int main(int argc,char *argv[])main()函数不能被其他函数调用,所以它的参数值从操作系统命令行获取。它有两个参数:argc和argv,其中argc为整型变量,代表命令行输入参

2014-11-16 16:02:42 762

原创 linux学习之二十二---进程间通信共享内存

共享内存1.共享内存就是分配一块能被其他进程访问的内存。每个共享内存段在内核中维护着一个内部结构shmid_ds(和消息队列、信号量一样),该结构体定义在头文件linux/shm.h中。2.共享内存的创建linux下使用函数shmget来创建一个共享内存区,或者访问一个已存在的共享内存区。该函数定义在头文件linux/shm.h中,原型如下:int shmget(key_t

2014-11-15 14:43:25 1067

原创 linux学习之二十一---信号量

一、信号量1.信号量的基本概念信号量是一个计数器,常用于处理进程或线程的同步问题,特别是对临界资源的访问的同步。临界资源可以简单的理解为在某一个时刻只能由一个进程或线程进行操作的资源,这里的资源可以是一段代码、一个变量或某种硬件资源。信号量的值大于或等于0时表示可供并发进程使用的资源实体数;小于0时代表正在等待使用临界资源的进程数。2.信号量的创建与使用linux下使...

2014-11-14 21:05:08 1199 1

原创 C++实现申请帐号---发送post提交表单信息包

交流学习!

2014-11-14 15:57:52 3478

原创 C++实现模拟登录---发送post表单信息包

交流学习!

2014-11-13 22:29:31 6526 2

原创 linux学习之二十---消息队列

一、消息队列消息对类是一个存放在内核中的消息链表,每个消息队列由消息队列标识符标识。与管道不同的是消息队列存放在内核中,只有在内核重启(即操作系统重启)或者显式地删除一个消息队列时,该消息队列才会被真正删除。操作消息队列时,需要一些数据结构,熟悉这些数据结构是掌握消息队列的关键。1.消息缓冲队列结构2.msqid_ds内核数据结构3.ipc_perm内核数据结构

2014-11-12 16:20:38 1005

原创 linux学习之十九---有名管道

有名管道:管道的一个不足之处是没有名字,因此,只能用于具有亲缘关系的进程间通信,在有名管道提出后,该限制得到了克服。FIFO不同于管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存储与文件系统中。有名管道是一个设备文件,因此,即使进程与创建FIFO的进程不存在亲缘关系,只要可以访问该路径,就能够通过FIFO相互通信。值得注意的是,FIFO总是按照先进先出的原则工作,第一个被写入的数据

2014-11-10 21:41:25 1034

原创 linux学习之十八---管道pipe&dup&dup2

1.管道的用法:进程在使用fork函数创建子进程前先创建一个管道,该管道用于在父子进程间通信,然后创建子进程,之后父进程关闭管道的读端,子进程关闭管道的写端。父进程负责向管道写数据而子进程负责读数据。也可以父进程关闭管道的写端,子进程关闭管道的读端。这样管道就可以用于父子进程间的通信,也可以用于兄弟进程间的通信。

2014-11-10 15:25:32 3336

原创 linux学习之十七---进程间通信的几种方式

进程间通信进程的地址空间是各自独立的,因此进程之间交互数据必须采用专门的通信机制。特别在大型的应用系统中,往往需要多个进程相互协作共同完成一个任务,这就需要使用进程间的通信编程技术。linux下进程间通信的几种主要方法:1.管道(pipe):管道是一种半双工的通信方式,数据只能单方向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2.有名管道(name

2014-11-09 21:01:02 1080

原创 linux学习之十六---条件变量pthread_cond_wait

条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。1.加锁函数:pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);pthread_cond_t

2014-11-09 13:39:38 1279

原创 linux学习之十六---互斥锁

线程最大的特点就是资源的共享性,然而资源共享中的同步问题是多线程编程的难点。Linux系统提供了多种方式处理线程间的同步问题,其中最常用的有互斥锁、条件变量和异步信号。1.互斥锁互斥锁是通过锁机制来实现线程间的同步。在同一时刻它通常只允许一个线程执行一个关键部分的代码。加锁函数:int pthread_mutex_lock(pthread_mutex_t *mutex);

2014-11-08 22:48:19 855

原创 linux学习之十五---多线程私有数据

linux多线程 私有数据在多线程环境下,进程内的所有线程共享进程的数据空间,因此全局变量为所有线程共有。在程序设计中有时需要保存线程自己的全局变量,这种特殊的变量仅在某个线程内部有效。线程私有数据采用立一种被称为一键多值的技术,即一个键对应多个数值。访问数据都是通过键值来访问,好像是对一个变量进行访问,其实是在访问不同的数据。使用线程私有数据时,首先要为每个线程数据创建一个相关联的键。在

2014-11-07 20:30:22 856

原创 linux学习值十四---线程终止pthread_exit()&pthread_join()

linux下有两种方式可以使线程终止。第一种通过return从线程函数返回,第二种通过调用函数pthread_exit()是线程退出。pthread_exit()函数原型:#include void pthread_exit(void* retval);参数retval:pthread_exit()调用线程的返回值,可以用pthread_join()函数来检索获取。功能:退

2014-11-07 12:36:18 15155 2

原创 linux学习之十三---多线程的创建

多线程的创建在Linux下线程的创建通过函数pthread_create来完成,该函数的声明如下:#includeint pthread_create(pthread_t *thread, pthread_attr_t *attr,void*(*start_routine)(void*),void *arg);函数各参数含义如下:thread:该参数是一个指针,档线程创

2014-11-06 16:12:56 964

原创 linux学习之十二---exit(0)&exit(1)&return

exit()与return的区别:exit(0):正常运行程序并退出程序,调用时程序运行正常结束;exit(1):非正常运行导致退出程序,调用时程序运行非正常结束;return():返回函数,若在主函数中,则会退出函数并返回一值。本质上:  1. return返回函数值,是关键字;  exit 是一个函数。  2. return是语言级别的,它表示了

2014-11-05 13:47:03 1647

转载 linux学习之十一---孤儿进程与僵尸进程

1、前言  之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念  我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的

2014-11-05 12:38:59 842

原创 linux学习之十---vfork()&fork()函数

vfork()也可以用来创建一个新进程,与fork()函数一样都是调用一次,返回两次,但它有自己的独特之处,区别如下:1.使用fork创建一个子进程,子进程完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。而使用vfork创建一个子进程,操作系统并不将父进程的地址可见完全复制到子进程,用vfork创建的子进程共享父进程的地址空间,也就是说子进程完全运行在父进程的地址空间

2014-11-04 21:29:38 890

原创 linux学习之九---孤儿进程

孤儿进程:如果一个子进程的父进程先于子进程结束,子进程就成为一个孤儿进程,它由init进程收养,成为init进程的子进程。

2014-11-04 19:51:48 759

原创 socket编程---获取网页上的超链接

//post#include#include#include#include#include#pragma comment(lib, "ws2_32.lib")#define name "www.baidu.com" #define host "baidu.com"#define wz "http://baidu.com"#define max 20480using na

2014-11-04 15:24:25 976

原创 socket编程---实现get post 向http发送请求

HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。请求报文一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。(1)请求行请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分

2014-11-01 21:31:36 14137 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除