![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++编程技术
hrbeuwhw
这个作者很懒,什么都没留下…
展开
-
线程同步——条件变量
1.互斥量的存在问题: 互斥量是线程程序必需的工具,但它们并非万能的。例如,如果线程正在等待共享数据内某个条件出现,那会发生什么呢?它可以重复对互斥对象锁定和解锁,每次都会检查共享数据结构,以查找某个值。但这是在浪费时间和资源,而且这种繁忙查询的效率非常低。 在每次检查之间,可以让调用线程短暂地进入睡眠,比如睡眠三秒钟,但是因此线程代码就无法最快作出响应。真正需要的是这转载 2015-12-01 13:18:51 · 739 阅读 · 0 评论 -
ACE初学者使用指南
ACE初学者使用指南 作者modern1.学习ACE要看书,初学者学习ACE没有什么捷径,如果有的话,那么就是看书了。 目前国内中翻本的ACE专门书籍一共有5本,个别书籍在书店不太好买到,在当当淘宝都可以取得。 不过还是转载 2012-10-20 18:08:47 · 7362 阅读 · 1 评论 -
表达式字符串求值,这里表达式中只有四种运算符”+,-*\”。例如,3+6*2;
表达式字符串求值,这里表达式中只有四种运算符”+,-*\”。例如,3+6*2; 这里采用算符优先算法,可以使用两个工作栈。一个称作OPTR_STACK,用于寄存运算符;另一个称作OPND_STACK,用于寄存操作数和运算结果。算法的基本思想:一次读入表达式中的每个字符,若是操作数则进OPND_STACK栈,若是运算符则和OPTR_STACK栈的栈顶运算符比较优先级后做相应的操作。1原创 2012-10-19 16:15:54 · 1002 阅读 · 1 评论 -
统计一个二进制数中1的个数
int func(x){ int countx=0; while(x) { countx++;x=x&(x-1); }return countx;}转载 2012-08-10 15:36:43 · 811 阅读 · 0 评论 -
二叉树后序遍历(非递归)
二叉树的递归遍历算法就不用说了;在非递归算法中,后序遍历难度大,很多书上只给出思想或者几段无法直接调试的代码,甚至有些书上是错的,当时我在研究的过程中,就是按着书上错误的代码绕了好半天,几预抓狂。好在最终摸索出来了,不禁感叹很多出书人的水平真是...... 这里将直接可以在编译器里调试的代码贴出来(在DEV-C++编译器中编译通过)这里我们约定:空的节点用空格表示,按照转载 2012-10-05 10:23:44 · 1289 阅读 · 0 评论 -
C语言修饰词之violate
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。 下面是volatile变量的几个例子:1) 并行设备的硬件寄存器(如:状态寄存器)2) 一个中断服务子程序中会访问到的非自动变量(No转载 2012-09-14 08:37:52 · 2412 阅读 · 0 评论 -
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明?
答案:可以,可以用_onexit注册一个函数,它会在main之后执行int fn1(void), fn2(void),fn3(void), fn4 (void);void main( void ){String str("zhanglin");_onexit( fn1 );_onexit( fn2 );_onexit( fn3 );_onexit( fn4 );转载 2012-10-01 15:58:00 · 1331 阅读 · 0 评论 -
按规定实现string类
class String{public:String(const char *str = NULL); // 通用构造函数String(const String &another); // 拷贝构造函数~ String(); // 析构函数String & operater =(const String &rhs); // 赋值函数private:char *m_data; //转载 2012-10-01 15:52:45 · 491 阅读 · 0 评论 -
指针参数问题
1. int swap(int *x,int *y) { if(x==NULL | | y==NULL) return -1; *x += *y; *y = *x- *y; *x -= *y; return 1; } 请改错,溢出已经考虑,不是错误 2. void foo(int *x, int *y) { *x += *y; *x += *转载 2012-10-01 16:04:12 · 487 阅读 · 0 评论 -
字符串拷贝函数 char *strcpy(char *strDest, const char *strSrc)
char *strcpy(char *strDest, const char *strSrc)其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写函数 strcpy。答案:char *strcpy(char *strDest, const char *strSrc){assert(strDest == NULL || strSr原创 2012-10-01 15:51:44 · 1308 阅读 · 0 评论 -
C++进行网络开发需要的工具
Module01 - Linux系统基础 由于本系列课程基于Linux(或UNIX),熟悉Linux操作系统是必要的前提。 该模块的课程包含以下方面的内容:常用Unix/Linux命令熟悉文件管理、文本处理、进程管理、网络、系统管理等各个方面大约100个常用的命令。深入了解bash了解Linux默认shell: bash 的语法、命令执行、I/O重定向、任务控制等。转载 2012-10-20 18:12:23 · 920 阅读 · 1 评论 -
位操作将n上调至align的倍数,align为2的倍数
//位操作将n上调至align的倍数,align为2的倍数static size_t ROUND_UP(size_t bytes,unsigned int align){return ((bytes+align-1) & ~(align-1));}原创 2012-11-09 09:38:13 · 1047 阅读 · 0 评论 -
GDB常用示例
本文写给主要工作在Windows操作系统下而又需要开发一些跨平台软件的程序员朋友,以及程序爱好者。GDB是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具。GDB中的命令固然很多,但我们只需掌握其中十个左右的命令,就大致可以完成日常的基本的程序调试工作。 命令 解释 示例file 加载被调试的可执行程转载 2013-06-04 08:58:14 · 745 阅读 · 0 评论 -
VC6.0的ActiveX控件实现
首先, ActiveX控件以前也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其它应用程序中。使用ActiveX插件,可以轻松方便的在 Web页中插入多媒体效果、交互式对象以及复杂程序等等。通常使用C++或VB开发ActiveX控件,关于如何做一个ocx控件可以参考孙鑫的书,上面讲得还蛮清楚的。 这里就简单介绍一下。参考自http://www.cnbl转载 2013-05-31 14:48:08 · 957 阅读 · 0 评论 -
一些vc开发浏览器及插件的资料
如何往IE工具条添加按钮问题提出:金山词霸、网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮。按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到IE的工具条中。基本原理:从IE5开始便允许我们向工具栏添加自己的按钮,其本质就是修改注册表,添加创建此按钮所需的信息。实现步骤:1.创建此按钮的GUID(globally uniq转载 2013-05-31 14:45:26 · 7201 阅读 · 0 评论 -
C++中的单例模式 .
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出,GUI应用必须是单鼠标,MODEM的联接需要一条且只需要一条电话线,操作系统只能有一个窗口管理器,一台PC连一个键盘。 单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点转载 2013-05-23 19:01:49 · 595 阅读 · 0 评论 -
初识bat文件
bat是dos下的批处理文件。批处理文件是无格式的文本文件,它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件(也被称为批处理程序或脚本),可以简化日常或重复性任务。转载 2013-05-21 10:03:20 · 622 阅读 · 0 评论 -
优秀的计算机类书籍
1、Java Java编程思想(第4版)----Java四大名著----------------Bruce Eckel(获取)JAVA 2核心技术 卷I:基础知识(原书第7版)---Java四大名著-----Cay Horstmann (获取)JAVA 2核心技术 卷II:高级特性(原书第7版)----Java四大名著-----Cay Horstmann (获取)Effe转载 2012-12-14 10:37:02 · 1614 阅读 · 0 评论 -
C++笔试题集
获取C++primer二、删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)struct link{int data;struct link *next;};void delMiddle(link *head){if(head == NULL)return;else if(head->next == NULL){delete h原创 2012-12-14 10:03:11 · 1017 阅读 · 0 评论 -
C++笔试题收集
二、删除一个单项链表的最中间的元素,要求时间尽可能短(不能使用两次循环)struct link{int data;struct link *next;};void delMiddle(link *head){if(head == NULL)return;else if(head->next == NULL){delete head;return;转载 2012-08-19 19:52:59 · 2996 阅读 · 0 评论 -
带有缓冲功能的read函数
static int read_count;static char *read_ptr;static char read_buf[MAXLINE];static size_t my_read(int fd,char*ptr){ if(read_count<=0) { again: if(read_count=read(fd,readbuf,sizeof(read_buf)))转载 2012-11-14 16:43:32 · 810 阅读 · 0 评论 -
链表的建立、删除节点、侧长和打印;
/* *链表的建立、删除节点、侧长和打印; */ #include #include #include struct LinkNode{ int data; struct LinkNode* next;};typedef LinkNode* LinkList;//LinkNode* AddNode(LinkNode* p,int原创 2012-08-28 15:07:13 · 405 阅读 · 0 评论 -
全排列
使用递归的方式求解一个集合的元素的全排列,n个元素的全排列等于n个元素和对应的剩余的n-1个元素的全排构成,依次类推。 ########################################################################include #include int t = 0; void swap(int *a, int原创 2012-08-26 16:31:17 · 473 阅读 · 0 评论 -
不使用中间变量交换两个变量值
交换两个变量的值,不使用第三个变量。即a=10,b=20,交换之后a=20,b=10;有两种解法, 一种用算术算法, 一种用^(异或)a = a + b;b = a - b;a = a - b; 或a = a^b;// 只能对int,char..b = a^b;a = a^b转载 2012-08-10 15:25:20 · 449 阅读 · 0 评论 -
spinlock的设计和实现
在Linux的内核中,spin lock用在多处理器环境中。当一个CPU访问一个临界资源 (critical section)的时候,需要预先取得spin lock,如果取不到的话,它就在空循环等待,直到另外的CPU释放spin lock。由于涉及到多个处理器,spin lock的效率非常重要。因为在等待spin lock的过程,处理器只是不停的循环检查,并不执行其他指令。转载 2012-08-10 15:18:33 · 460 阅读 · 0 评论 -
C关于字符串的一个小问题
char *aa=(char*)malloc(20); aa[0]='b'; char *bb="sdfsdfsdf"; bb[0]='b'; char cc[]="asdfsdfsd"; cc[0]='b';原创 2012-08-10 15:13:54 · 681 阅读 · 0 评论 -
gcc基本用法
初学时最好从命令行入手,这样可以熟悉从编写程序、编译、调试和执行的整个过程。编写程序可以用vi/vim或其它编辑器编写。 编译则使用gcc命令。要往下学习首先就得熟悉gcc命令的用法。 gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。一. 常用编译命令选项假设源程序转载 2012-08-06 18:45:37 · 547 阅读 · 0 评论 -
关于C/C++中结构体(Struct)类型的sizeof结果的探讨
关于C/C++中结构体(Struct)类型的sizeof结果的探讨看了很多关于sizeof()的使用解释和说明,对于内置类型来说,基本没有什么问题,但是一旦将sizeof()用于结构体类型或其变量,就有点犯晕。很多地方没有给出一个可以套用的模式来说明其所得的结果是什么,有的说到了字节对其问题,例如,CPU的优化规则:对于n个字节的元素,它的首地址能被n整除,才能过的最好的性能。原创 2012-05-25 20:18:31 · 2040 阅读 · 1 评论 -
获取系统图标
一点不足,文件夹图标是从shell32.dll中得到的.一般情况下是没有问题的.但是当文件夹的图片时自定义的时候就无法得到了.继续研究中using System;using System.IO;using System.Drawing;using Microsoft.Win32;using System.Runtime.InteropServices;转载 2012-05-18 14:12:47 · 862 阅读 · 0 评论 -
Linux命令全称
/bin = BINaries/dev = DEVices/etc = ETCetera/lib = LIBrary/proc = PROCesses/sbin = Superuser BINaries/tmp = TeMPorary/usr = Unix Shared Resources/var = VARiable ?FIFO = First In, Fir转载 2012-05-16 20:44:18 · 2840 阅读 · 0 评论 -
10 个免费的 C/C++ 集成开发环境
集成开发环境(IDE)可以给程序员提供很大的帮助。大多数的IDE包含编译器和解释器。例如微软的 Visual Studio 本身内置的编译器和解释就是很好的例子,Eclipse 是另一个很好的例子。鼓励程序员使用IDE的主要原因是开发软件应用程序的各个组成部分之间可方便的进行切换。一般一个特定的IDE是负责处理一种编程语言,但也有一些支持多种编程语言的 IDE,例如 NetBeans,Mi转载 2012-05-31 10:39:01 · 1051 阅读 · 0 评论 -
8 个很棒的免费的 C++ GUI 库
现在我们要给开发者分享几个C++GUI库。我希望这些库能帮助开发者开发出更优美的软件。C++是一个多范式,自由编译格式的,对于日常编程应用非常强大的语言。这种语言被认为是一种中间层次的语言。主要是因为他同时包含了底层和高层的语言的特性。C++因为很多原因非常流行。它的领域很广,包括系统软件、设备驱动、应用软件和其他客户端软件以及娱乐软件比如电子游戏。GUI是图形用户界面的缩写,转载 2012-05-31 10:36:42 · 1242 阅读 · 0 评论 -
关于memcpy函数探讨
//这是微软公开的crt src文件夹内的源代码:void * memcpy_1 (void * dst, void * src , size_t n){ void * ret = dst; while (n--) { *(char *)dst = *(char *)src; dst = (char *)dst + 1转载 2012-08-10 15:20:03 · 512 阅读 · 0 评论 -
数组的循环右移
【题目】有一个整数数组,现要求实现这个整数数组的循环右移。如:1,2,3,4,5 则循环右移两位后结果是:4,5,1,2,3。方法一:(最最容易想到的办法)void RightCircleShift_00(intbuffer[],int shift){ inti,j,tt; for(i=0;i { tt =buffer[ARRSIZE-1]转载 2012-08-10 15:36:06 · 7109 阅读 · 1 评论 -
常用排序算法简单实现
////////////////////////////////////常用的排序算法,简单实现 ///////////////////////////////////#include #include void InsertSort(int * data,int length);void print_array(int * data,int length);void bubb原创 2012-09-03 19:32:39 · 400 阅读 · 0 评论 -
C程序内存结构
C程序内存结构一个32位的运行在保护模式下应用程序 无论是Linux 还是Windows 都给它分配一个4GB的平坦的内存空间一个运行着的c程序所占用的内存空间分为:代码区 初始化数据区 未初始化数据区 堆区 和 栈区 在地址上从高位到地位为(高位)栈区堆区未初始化数据区(即BBS)数据区代码区(低位)栈区存放函数的参数值、局部变转载 2012-08-20 08:21:49 · 1265 阅读 · 0 评论 -
比较C++中的4种类型转换方式
C++的四种cast操作符的区别并非我的原创----------------------------------------------------------------------Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?A:转换的含义是通过改变一个变量的类型为别的类型从转载 2012-08-20 08:32:25 · 23021 阅读 · 0 评论 -
C++ 面试常见问题
1.求下面函数的返回值(微软)int func(x){int countx = 0;while(x){countx ++;x = x&(x-1);}return countx;} 假定x = 9999。答案:8思路:将x转化为2进制,看含有的1的个数。2. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是转载 2012-08-19 19:54:02 · 5064 阅读 · 1 评论 -
atoi函数实现
int my_atoi(const char* p){ assert(p != NULL); bool neg_flag = false;// 符号标记 int res = 0;// 结果 if(p[0] == '+' || p[0] == '-') neg_flag = (*p++ != '+'); while('0'*转载 2012-08-19 19:42:20 · 478 阅读 · 0 评论 -
C 程序,写运行结果,考察多态
#include #include class A { public: void f1() { printf("A::f1\r\n"); } virtual void f2() { printf("A::f2\r\n"); } void callfunc() { printf("A::callfunc\r\n"); f1(); f原创 2012-08-18 16:47:52 · 686 阅读 · 0 评论