C/C++
天天向上zb
爱拼才会赢
展开
-
C++模板
(1) 什么是类模板一个类模板(也称为类属类或类生成类)允许用户为类定义一种模式,使得类中的某些数据成员、默写成员函数的参数、某些成员函数的返回值,能够取任意类型(包括系统预定义的和用户自定义的)。 如果一个类中数据成员的数据类型不能确定,或者是某个成员函数的参数或返回值的类型不能确定,就必须将此类声明为模板,它的存在不是代表一个具体的、实际的类,而是代表着一类类。 模原创 2015-10-06 14:36:30 · 654 阅读 · 0 评论 -
unix网络编程-第3,4章套接字编程
基本TCP客户-服务器程序的套接口函数如下图:1、socket函数原型:#includeint socket(int family, int type, int protocol); 返回值:非负描述符--成功, -1--出错;作用:指定期望的通信协议接口(TCP或UDP或unix域字节协议等)family 指明协议簇族解释AF_IN原创 2015-06-05 10:30:55 · 650 阅读 · 0 评论 -
TCP/IP协议和C/S模式--TCP/IP详解笔记(1)
一.TCP/IP协议简介 TCP/IP不是一个协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了。二.TCP/IP协议分层提到协议分层,我们很容易联想到ISO-OSI的七层协议经典架构,但是TCP/IP协议族的结构则原创 2015-06-09 10:55:03 · 5991 阅读 · 0 评论 -
网络编程中的read,write函数
转自: http://blog.csdn.net/chenping314159/article/details/7624029关于TCP/IP协议,建议参考Richard Stevens的《TCP/IP Illustrated,vol1》(TCP/IP详解卷1)。关于第二层面,依然建议Richard Stevens的《Unix network proggramming,vol1》(Un转载 2015-06-09 11:33:09 · 1325 阅读 · 0 评论 -
排序
/*冒泡排序基本思想将n个记录看作按纵向排列,每趟排序时自下至上对每对相邻记录进行比较,若次序不符合要求(逆序)就交换。每趟排序结束时都能使排序范围内关键字最小的记录象一个气泡一样升到表上端的对应位置,整个排序过程共进行n-1趟,依次将关键字最小、次小、第三小…的各个记录“冒到”表的第一个、第二个、第三个… 位置上。 初态 第1趟 第2趟 第3趟 第4趟原创 2015-06-07 19:19:37 · 509 阅读 · 0 评论 -
进程控制 [fork() exec() wait() waitpid()]
1 fork()创建子进程(1) FORK(2) Linux Programmer’s Manual[头文件及原型]#include pid_t fork(void)[功能简述]fork ----通过复制调用fork的进程创建一个新进程。[返回值]创建子进程成功时,fork在父进程中返回子进程的pid,在子进程中返回转载 2015-06-05 11:07:14 · 2518 阅读 · 0 评论 -
c++ 时间类型详解 time_t
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix 系统、类Unix系统中,也在许多其他操作系统中被广告采用。 目前相当一部分操作系统使用32位二进制数字表示时间。此类系统的Unix转载 2015-06-03 20:18:33 · 1654 阅读 · 0 评论 -
STL源码剖析---heap
Heap堆是常用的数据结构,Heap中也可以存放元素。但是STL中并没有提供Heap容器,只是提供了关于Heap操作的算法。只要支持RandomAccessIterator的容器都可以作为Heap容器。Heap的背景是建立在优先队列的基础上,priority queue允许我们任意的插入一个元素,但是会自动将元素进行排序,使得取出时一定是从优先级最高的元素开始取。我们可以考虑使用list这种数据结原创 2015-06-01 16:02:48 · 613 阅读 · 0 评论 -
STL源码剖析---stack,queue
Stack栈是常用的一个FILO数据结构,FILO是指first in last out,先进后出。因为栈只有一个口,即在这个口进也在这个口出,stack允许新增元素、移除元素、取得最顶端元素。但除了最顶端元素外,没有任何其他方法可以存取stack的其他元素。只能在栈顶操作,不能访问栈中的其他元素,所以栈没有迭代器。Stack的实现是依赖其他容器的,用deque做底层数据结构。这样的实现,在S原创 2015-06-01 15:25:10 · 745 阅读 · 0 评论 -
C++ GUI Qt4学习笔记(二) 创建对话框
一.finddialog.h文件 /* *首先,声明四个用到的类。这里所做的是前向声明,否则就会编译出错,因为编译器不知道这些类是否存在 *为了slots的定义,需要访问Dialog的组件,因此就把其中的组件定义为成员变量以便访问。 *正是因为需要这些组件,才需要对它们的类型进行前向声明。因为我们仅仅使用的是指针,并不涉及到这些 *类的函数,因此并不需要include它们的头文原创 2015-06-30 22:03:32 · 1177 阅读 · 0 评论 -
#ifndef、#define、#endif等宏的使用
一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编 译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序段2 #endif 它的作用是:当标识符已经被定义过(一原创 2015-06-30 18:46:54 · 915 阅读 · 0 评论 -
求有环单链表中的环长、环起点、链表长
求有环单链表中的环长、环起点、链表长1.判断单链表是否有环 使用两个slow, fast指针从头开始扫描链表。指针slow 每次走1步,指针fast每次走2步。如果存在环,则指针slow、fast会相遇;如果不存在环,指针fast遇到NULL退出。 就是所谓的追击相遇问题: 2.求有环单链表的环长 在环上相遇后,记录第一次相遇点为Pos,之后指针slo原创 2015-09-13 21:10:42 · 523 阅读 · 0 评论 -
C printf() 详解——printf('%08x',number); 程序员面试宝典中的一个错误 char * b=(char *)&a
本文转自:http://www.cppblog.com/wuzimian/archive/2012/05/23/175925.aspx1 #include 2 using namespace std; 3 int main() 4 { 5 unsigned int a = 0xFFFFFFF7; 6 unsigned char i = (unsi转载 2015-09-07 11:46:11 · 3428 阅读 · 0 评论 -
队列(C语言版)
1.队列 (先进先出(first in first out ,缩写FIFO)的线性表)a.链式队列----队列的链式表示和实现2.循环队列原创 2015-08-17 19:11:13 · 590 阅读 · 0 评论 -
一步步将vim改造成C/C++开发环境(IDE)
转自: http://blog.csdn.net/yinjiabin/article/details/8254609我的vim IDE界面: 1、安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc转载 2015-06-11 21:36:27 · 644 阅读 · 0 评论 -
gcc参数详解
gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] [参数详解] -x language转载 2015-06-11 21:27:48 · 568 阅读 · 0 评论 -
第18章 用于大型程序的工具
1. 独立开发的库几乎不可避免的使用彼此相同的名字,一个库中定义的名字可能会与其他库中的相同名字冲突.为了避免冲突,可以将名字定义在namespace中.2. 通过异常.我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题. 有效使用异常处理需要理解: ■ 在抛出异常时会发生什么 ■ 在捕获异常时又会发生什么转载 2015-05-25 11:04:35 · 459 阅读 · 0 评论 -
经典排序算法
1.经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。#include原创 2015-07-06 21:35:56 · 815 阅读 · 0 评论 -
STL源码剖析---deque
deque的概述deque是一种双向开口的连续线性空间,允许我们在头尾两端操作。所以我们需要保证deque可以在常数时间内对头和尾元素进行插入或者删除。 Deque还有一个明显的与Vector不同的特点,就是它没有capacity的概念,它是动态地用分段连续的空间组合起来的,随时可以增加一段新的空间并连接起来,而为了隐藏deque的这些底层细节(分段连续的空间组成---需要一个中央管理器来管理原创 2015-05-31 22:05:29 · 574 阅读 · 0 评论 -
STL源码剖析—list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。list不仅是一个双向链表,而且还是一个环状双向链表。另外,还有一个重要性质,插入操作和接合操作都不会造成原有的list迭代器失效,这在vector是不成立的原创 2015-05-31 21:28:28 · 898 阅读 · 0 评论 -
STL源码剖析vector
STL源码剖析---vector vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳转载 2015-05-29 19:14:04 · 472 阅读 · 0 评论 -
C++中 模板Template的使用
C++中 模板Template的使用 (2011-08-23 10:18:57)转载▼标签: 模板 template分类: C/C 学习笔记1、在c++Template中很多地方都用到了typename与class这两个关键字,而且好像可以替换,是不是这两个关键字完全一样呢?答:class用于定义类转载 2014-04-06 15:12:02 · 3201 阅读 · 0 评论 -
C++Primer再读读书笔记:第一、二章
过去也看过一遍,不过当时没怎么详细理解,在此阅读一遍查漏补缺,将基础的回味一下。记录下点滴。 1、变量初始化: 定义变量时,应该给变量赋初始值,除非确定将变量用于其他意图之前会覆盖这个初值。如果不能保证读取变量之前重置变量,就应该初始化变量。变量的初始化如下:[cpp] view plaincopyprint?转载 2014-04-02 23:07:06 · 787 阅读 · 0 评论 -
using与命名空间
Using与命名空间在学习C++的过程中,我们经常看到一些书上写着的一行语句:using namespace std;在说明using的使用,必须先了解命名空间的概念和使用。在一个给定作用域中定义的每个名字在该作用域中必须是唯一的,对庞大、复杂的应用程序而言,这个要求可能难以满足。这样的应用程序的全局作用域中一般有许多名字定义。由独立开发的库构成的复杂程序列更有可能遇到名字冲突——转载 2014-03-31 23:56:47 · 1068 阅读 · 0 评论 -
插入排序
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置⒌ 将新元素插入到下一位置中⒍ 重复步骤2~5如果比较操原创 2014-03-30 17:28:49 · 668 阅读 · 0 评论 -
内部排序之四:归并排序和快速排序(含完整源码)
前言 之所以把归并排序和快速排序放在一起探讨,很明显两者有一些相似之处:这两种排序算法都采用了分治的思想。下面来逐个分析其实现思想。归并排序 实现思想 归并的含义很明显就是将两个或者两个以上的有序表组合成一个新的有序表。归并排序中一般所用到的是2-路归并排序,即将含有n个元素的序列看成是n个有序的子序列,每个子序列的长度为1,而后转载 2014-03-08 16:03:22 · 1057 阅读 · 0 评论 -
Windows程序内部运行原理
Windows程序内部运行原理 Windows应用程序,操作系统,计算机硬件之间的相互关系 关于API向下的箭头③表示应用程序可以转载 2013-12-16 17:29:49 · 753 阅读 · 0 评论 -
#define UNREFERENCED_PARAMETER(P) (P)
UNREFERENCED_PARAMETER展开传递的参数或表达式。其目的是避免编译器关于未引用参数的警告。许多程序员,包括我在内,喜欢用最高级别的警告 Level 4(/W4)进行编译。Level 4 属于“能被安全忽略的事件”的范畴。虽然它们可能使你难堪,但很少破坏你的代码。例如,在你的程序中可能会有这样一些代码行: int x=1; 但你从没用到过 x。也许这一行是你以前使用 x 时留转载 2013-12-11 14:49:59 · 1275 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第11章:泛型算法)
第十一章:泛型算法 标准库容器定义的算法很少,而是选择提供一组算法.。泛型是指这些算法不依赖特定的容器类型,可作用在不同类型的容器和不同类型的元素上。不但可以作用在list和vector上还可以作用在内置数组上。 迭代器将算法和容器绑定起来。大多数算法是通过遍历有两个迭代器标记的一段元素来实现其功能。find函数,接受两个迭代器和一个值作为参数,它检查两个迭代器实参标记转载 2014-04-06 16:06:00 · 666 阅读 · 0 评论 -
C++ Primer 第三章 标准库类型
C++ Primer 第三章 标准库类型3.1 命名空间的using声明 using声明是对某个命名空间做引入。主要作用是简化代码编写。 3.2 标准string类型 首先要明确类型是类类型,意味着它有构造函数,也类似我们自定义的类一样的其他类对象。 它有几种初始化方式如下 string s1 ; // 调用默认构造函数初始化对象转载 2014-04-07 20:25:06 · 740 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2015-04-12 09:59:13 · 404 阅读 · 0 评论 -
Linux C/C++常用函数
1.atoi() atoi (表示 alphanumeric to integer)是把字符串转换成长整型数的一个函数,应用在计算机程序和办公软件中。 int atoi(const char *nptr); 参数nptr字符串,如果第一个非空格字符存在,是数字或者正负号则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。否则,返回零。原创 2015-03-23 15:13:02 · 594 阅读 · 0 评论 -
C++Primer 引用
关于引用和指针的区别的文章很多很多,但是总是找不到他们的根本区别,偶然在codeproject上看到这篇文章,觉得讲的挺好的,所以翻译了下,希望对大家有帮助。原文地址: http://www.codeproject.com/KB/cpp/References_in_c__.aspx 引言 我选择写 C++ 中的引用是因为我感觉大多数人误解了引用。而我之所以有这个感受是转载 2014-10-31 22:28:38 · 538 阅读 · 0 评论 -
孙鑫C++教程笔记03
讲述MFC AppWizard的原理与MFC程序框架的剖析。AppWizard是一个源代码生成工具,是计算机辅助程序设计工具,WinMain在MFC程序中是如何从源程序中被隐藏的,theApp全局变量是如何被分配的,MFC框架中的几个类的作用与相互关系,MFC框架窗口是如何产生和销毁的,对窗口类的PreCreateWidow和OnCreate两个函数的着重分析,Windows窗口与C++中的CWn原创 2014-08-17 21:19:54 · 789 阅读 · 0 评论 -
孙鑫C++教程笔记02
#include class Point{public:int x;int y;/* void init(){x=0;y=0;}*/Point(){x=0;y=0;}Point(int a,int b){x=a;y=b;}~Point(){}void output(){cout}void原创 2014-08-13 20:27:13 · 720 阅读 · 0 评论 -
孙鑫C++教程笔记01
typedef struct tagMSG { // msg HWND hwnd; //标识窗口过程接收消息的窗口。 UINT message; //指定消息号。 WPARAM wParam; //指定有关消息的更多信息。 确切含义取决于 message 成员的值 LPARAM lParam; //指定有关消息的更多信息。 确切含义取决于 m原创 2014-08-11 22:23:19 · 676 阅读 · 0 评论 -
孙鑫C++教程笔记04
MFC消息映射机制的剖析,讲述如何运用ClassWizard,,理解发送给窗口的消息是如何被MFC框架通过窗口句柄映射表和消息映射表来用窗口类的函数进行响应的。掌握设备描述表及其封装类CDC的使用,CDC是如何与具体的设备发生关联的,融合具体的画图程序进行分析。如何设置封闭图形的填充刷子(位图画刷与透明画刷的使用)。1,在CMainFrame中 void CMainFrame::O原创 2014-08-21 09:47:16 · 633 阅读 · 0 评论 -
孙鑫C++教程笔记5
掌握CDC的文字处理程序的编写,如何产生自定义字体和自定义插入符,熟悉对CString类的使用。通过对卡拉OK程序的编写,讲解定时器的使用和DrawText函数的巧妙运用。讲解如何使用CDC的裁减功能。/////////////////////////////////////////////////////////////////////////////// CTextView原创 2014-09-04 15:28:49 · 821 阅读 · 0 评论 -
模板和异常处理
•模板是一种基于类型参数生成函数和类的机制,是实现代码重用机制的一种工具。它可以实现类型参数化,即把类型定义为参数,从而实现代码重用。•模板按照用途分为函数模板和类模板。一个函数模板可以经参数实例化后生成许多仅类型参数不同的模板函数;一个类模板可以经参数实例化后生成许多仅类型参数不同的模板类,而每个模板类都可以定义各自的许多对象,如下图所示。 C++语言原创 2013-12-06 10:46:27 · 1753 阅读 · 0 评论