随笔分类 - C/C++/C#
1
摘要:题目:输入一个整型数组,数据元素有正数也有负数,求元素组合成连续子数组之和最大的子数组,要求时间复杂度为O(n)。例如:输入的数组为1, -2, 3, 10, -4, 7, 2, -5,最大和的连续子数组为3, 10, -4, 7, 2,其最大和为18。背景:本题最初为2005年浙江大学计算机系考研题的最后一道程序设计题,在2006年里包括google在内的很多知名公司都把本题当作面试题。由于本题在网络中广为流传,本题也顺利成为2006年程序员面试题中经典中的经典。分析:如果不考虑时间复杂度,我们可以枚举出所有子数组并求出他们的和。不过非常遗憾的是,由于长度为n的数组有O(n2)个子数组(即:
阅读全文
摘要:某童靴前天去理想国际某公司面试,回来在宿舍讨论了这样一道题:VC++里,有一个空类,没有声明任何成员变量或函数,请问此空类占多大字节空间?A、 0 B、 1 C、 4 D、8当时考虑了32bit和64bit机器,并且指针地址是int型,32bit占4个字节或64bit占8个字节,因此选了C和D后又想想,这没有操作指针,也就不需内存对齐(视VC++编译器会自动进行对齐优化),排除了C和D,选择了A当时也考虑过侯捷老师译著的那本《深度探索C++对象模型》,C++中继承与多态在编译器中是如何区分的,所以0字节也不靠谱但至少也不会仅占一个字节吧,因此当时首先就把B彻底ki...
阅读全文
摘要:1. __attribute__ GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数__attribute__语法格式为:__attribute__ ( ( attribute-list ) )函数属性(Function Attribute),函数属性可以帮助开发者把一些特性添加到
阅读全文
摘要:方法一首先,Windows下,配置Adroid环境变量(Win7为例)1、桌面右键——》我的电脑——》高级系统设置2、高级——》环境变量——》系统变量——》Path3、添加android sdk目录到系统变量Path中,如下图:注:F:/Pro-files/android-sdk-windows/tools,添加到系统Path如果有F:/Pro-files/android-sdk-windows/platform-tools,也一并添加到系统Path,说明:最新版的Android SDK安装,emulator命令一般在tools目录中,adb命令移到了platform-tools目录接着,启动
阅读全文
摘要:一 相关下载(1) java JDK下载:进入该网页:http://java.sun.com/javase/downloads/index.jsp(或者直接点击下载)如下图:选择 Download JDK 只下载JDK,无需下载jre.(2)eclipse下载 进入该网页:http://www.eclipse.org/downloads/(或者直接点击下载:BT下载HTTP下载) 如下图:我们选择第一个(即eclipse IDE for java EE Developers)(3)下载Android SDK 说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升
阅读全文
摘要:1,开发C程序的必要工具和设置A,Solaris下的开发工具在solaris下开发C应用程序,缺省开发环境是Sun Studio。目前Sun Studio 11是Sun公司最新的C/C++/Fortran开发工具,这个工具已经安装在Unix体验中心的服务器上,我们可以直接使用。在Sun Studio 中,其中C程序的编译工具名称为cc。还有的就是make这个命令,make命令是Solaris安装后就自带了,不需要我们另外安装。B,设置环境变量在solaris下开发C应用程序,需要把编译器和make的路径加入到环境变量PATH中去,一般来说,可以使用export命令来进行这个方面的设置。假设您使
阅读全文
摘要:#include<qfile.h>#include<qtextstream.h>1.打开文件QFilef(fn);//fn可以是一个相对路径或绝对路径f.open(IO_);//一般不要IO_ReadWrite,很容易出现赃数据//如果要在文件的后面添加内容要IO_WriteOnly|IO_Append//如果要清空原来的内容,只要IO_WriteOnly//IO_Translate用来读windows文件,linux下的回车换行是/n,windows下是/r/n2.写文件QTextStreams(&f);s<<"Hello,world!!
阅读全文
摘要:1. 前言 Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作。比如实现一个ping程序来测试网络的连通性,实现ping函数需要写上200~300行代码,为什么不能直接调用系统的ping命令呢?通常在程序中通过 system函数来调用shell命令。但是,system函数仅返回命令是否执行成功,而我们可能需要获得shell命令在控制台上输出的结果。例如,执行外部命令ping后,如果执行失败,我们希望得到ping的返回信息。2. 使用临时文件 首先想到的方法就是将命令输出重定向到一个临时文件,在我们的应用程序..
阅读全文
摘要:.cpp 是源程序代码c++文件.h 是包含函数声明和变量定义的头文件.rc 是定义资源的资源脚本文件.dsp 是工程文件,记录当前工程的有关信息.dsw 是工作区文件,一个工作区可能包含一个或多个工程...(其它.clw .opt .aps等后缀文件,见下面说明).opt 工程关于开发环境的参数文件。如工具条位置等信息;.aps (AppStudio File),资源辅助文件,二进制格式,一般不用去管他..clw ClassWizard信息文件,实际上是INI文件的格式,有兴趣可以研究一下.有时候ClassWizard出问题,手工修改CLW文件可以解决.如果此文件不存在的话,每次用Class
阅读全文
摘要:在Windows中,用户或系统中所发生的任何活动被当作事件来处理,例如,用户按下了鼠标按钮,就产生一鼠标事件。对于所发生的每一个事件,Windows将其转换成消息的形式放在一个称为消息队列的内存区中,然后由Windows的消息发送程序选择适合的对象,将消息队列中的消息发送到欲接受消息的对象上。Windows的消息可分为四种类型: (1)输入消息:对键盘和鼠标输入作反应。这类输入消息首先放在系统消息队列中,然后Windows将它们送入应用程序的消息队列,使消息得到处理。 (2)控制消息:用来与Windows的特殊控制对象,例如,对话框、列表框、按钮等进行双向通信。这类消息一般不通过应用程...
阅读全文
摘要:最近正在学习C++程序从 Windows 平台向 Unix 平台移植,参考了 qt 的宏定义文件Win Unix Mac 等多种系统平台的宏定义,平台移植时可做参考#ifndef QGLOBAL_H#define QGLOBAL_H#define QT_VERSION_STR "3.1.2"/* QT_VERSION is (major << 16) + (minor << 8) + patch. */#define QT_VERSION 0x030102/* The operating system, must be one of: (Q_OS_x
阅读全文
摘要:通过认识 Microsoft Windows 和 Linux 操作系统设备控制的工作原理,简化从 Microsoft Windows 向 Linux 迁移设备控制应用程序。作者分析二者的差别,并给出 C/C++ 示例。如果读者开发过不同平台的设备控制应用程序,那么肯定了解 Windows 和 Linux 的设备控制方式的差别,从一个平台向另一个平台迁移应用程序相当复杂。本文分析两种操作系统的设备控制原理,探究从架构到系统调用的各个方面,重点比较二者差别。本文还给出一个迁移示例(用 C/C++ 编写),详细演示迁移过程。从 Windows 向 Linux 迁移设备控制应用程序(IBM.com)
阅读全文
摘要:对于这个问题,网上已经有很多资料给予了介绍,但是相比于这些信息,本文立足于个人的实践,将内容具体到开发环境和源代码,我觉得还是有很多值得总结和借鉴的。首先声明开发环境。Win32程序的开发环境是VS.Net 2008,编程语言是C;Linux使用的RHEL 5.4,GCC的版本是4.1.2,编程语言也是C。然后依次说明移植的对象:数据类型/字符串处理/系统调用/套接字/进程/进程锁/线程/线程锁/信号量/事件锁/条件锁/系统服务。1. 数据类型:在开发过程中,无论哪种平台,只使用最通用的数据类型char,unsigned char,int,unsigned int,void *以及它们组合的结
阅读全文
摘要:摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。1、引言动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。采用动态库技术对于升级软件版本更加容易。与静
阅读全文
摘要:GlobalAlloc是为了与Win16兼容才保留的,在Win32下不要使用。 全局内存对象使用GlobalAlloc函数分配,在Windows 3.X的时代,分配的内存可以有两种,全局的和局部的,例如GlobalAlloc和LocalAlloc。但在Win32的时代这些函数已经被废弃了,现在的内存只有一种就是虚存。在Win32中所有的进程所使用的内存区域是相互隔离的,每个进程都拥有自己的地址空间。而且系统使用了页面交换功能,就是利用磁盘空间来模拟RAM,在RAM中数据不使用时将会被交换到磁盘,在需要时将会被重新装入RAM。两者都是在堆上分配内存区。malloc是C运行库中的动态内存分配函数,
阅读全文
摘要:C++中的智能指针简单地讲,智能指针是用一个对象来对指针进行建模,使之具有指针的特性,跟指针具有相同含义的->,*操作.并且通过对象的构造函数(获取资源),析构资源(释放资源)来对资源进行管理,从而减少程序员对通过new操作获取到的对象的生命周期进行管理的负担.根据《Moden C++ Design》,我们可以构造具有很多正交特性的智能指针。1.1 C++中的智能指针与JAVA中的对象前段时间跟朋友聊了些有关JAVA的东西,感觉上Java中的对象就是C++中的智能指针,但具有不同的资源释放方式。在JAVA中,不能象C++中运用" A a;"语句声明得到一个类(A)的事
阅读全文
摘要:在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出.对于网络编程的更多详细说明建议参考下面的书籍《UNIX网络编程》 《TCP/IP 详解》 《Unix环境高级编程》非阻塞IO和阻塞IO:在网络编程中对于一个网络句柄会遇到阻塞IO和非阻塞IO的概念, 这里对于这两种socket先做一下说明基本概念:socket的阻塞模式意味着必须要做完IO操作(包括错误)才会返回。 非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。设置:一般对于一个socket是阻塞模式还是非阻塞模式有两
阅读全文
摘要:func(Typepara1,Typepara2,Typepara3,...) { /******Step1******/ va_listap; va_start(ap,para3);//一定要“...”之前的那个参数**ap指向para后的第一个可变参数。 /******Step2******/ //此时ap指向第一个可变参数 //调用va_arg取得里面的值 Typexx=va_arg(ap,Type); //Type一定要相同,如: //char*p=va_arg(ap,char*); //inti=va_arg(ap,int); //如果有多个参数继续调用va_arg /****...
阅读全文
摘要:了解系统的线程资源限制是使得应用程序恰当地管理它们的关键。前面已经讨论了利用系统资源的示例。当设置线程的栈大小时,最小值为PTHREAD_MIN_STACK。栈大小不应当低于由pthread_attr_getstacksize( )返回的默认栈大小的最小值。每个进程的最大线程数决定了能够为每个进程创建的worker线程的上限。函数sysconf( )用于返回可配置系统限制或选项的当前值。系统中定义了同线程、进程和信号量相关的多个变量和常量。在表6-8中,列出了部分变量和常量。变量名字值(Name Value)描述_SC_THREADS_POSIX_THREADS支持线程_SC_THREAD_A
阅读全文
摘要:一、 摘要C语言编译的整个过程是非常复杂的,里面涉及到的编译器知识、硬件知识、工具链知识都是非常多的,深入了解整个编译过程对工程师理解应用程序的编写是有很大帮助的,希望大家可以多了解一些,在遇到问题时多思考、多实践。一般情况下,我们只需要知道分成编译和连接两个阶段,编译阶段将源程序(*.c)转换成为目标代码(一般是obj文件,至于具体过程就是上面说的那些阶段),连接阶段是把源程序转换成的目标代码(obj文件)与你程序里面调用的库函数对应的代码连接起来形成对应的可执行文件(exe文件)就可以了,其他的都需要在实践中多多体会才能有更深的理解。二、C语言编译全过程1) 编译的概念:编译程序读取源程序
阅读全文
1