文章分类 - c/c++
1
摘要:给定一个数A,不使用sqrt函数,求A的开方,要求精度大于0.0001该题有两种方法求解:①牛顿迭代法;②二分法①牛顿迭代法:1.牛顿迭代法知识:牛顿迭代法(Newton’s method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以
阅读全文
摘要:1、题目:宿舍内有五个童鞋一起玩对战游戏,每场比赛有一些人作为红方,另外一些人作为蓝方,请问至少需要多少场比赛才能使得任意两个人之间有一场红方对蓝方和一场蓝方对红方的比赛,请写出思路。分析:更具一般性而言,舍有n个人玩对战游戏好喽,要使得任意两个人之间都发生过两种关系(虽然不雅,这里暂时称作“发生关系”)。那么要使得总的比赛次数尽可能小,则每场比赛就要使得尽量多的新的关系产生,比如,第一场比赛,假设红方有m个人,蓝方放了n-m个人,则总共产生m*(n-m)个关系,其中1nLength1){pListHeadLong=pHead2;pListHeadShort=pHead1;nLengthDif
阅读全文
摘要:原文链接:http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可能会显示成这个样子:load average: 0.09, 0.05, 0.01很多人会这样理解负载均值:三个数分别代表不同时间段的系统平均负载(一分钟、五 分钟、以及十五分钟),它们的数字当然是越小越好。数字越高,说明服务器的负载越 大,这也可能是服务器出现某种问题的信号。而事实不完全如此,是什么因
阅读全文
摘要:概述内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当使用大量的函数对相同的内存块进行处理时,很可能会出现内存泄漏。内存泄露可以分为以下几类:1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也
阅读全文
摘要:移位运算包含“逻辑移位”(logical shift)和“算术移位”(arithmetic shift)。逻辑移位:移出去的位丢弃,空缺位(vacant bit)用 0 填充。算术移位:移出去的位丢弃,空缺位(vacant bit)用“符号位”来填充,所以一般用在右移运算中。 c++中,整数分有符号数和无符号数两种,对于这两种数做左移、右移运算,稍有区别:1、如果是无符号数,不管是左移还是右移都是“逻辑移位”例如,分别对无符号数 179 做左移、右移操作的结果, 图1 逻辑左移图2 逻辑右移2、如果是有符号数,2a,如果是做左移运算,那么做的是“逻辑移位”,同 1中无符号数的左移。2b,如果是
阅读全文
摘要:转:http://www.cnblogs.com/520zijuan/archive/2013/02/18/2913074.html一、位运算1.1 求下面函数的返回值( 微软) 1 int func(x) 2 { 3 int countx =0; 4 while(x) 5 { 6 countx++; 7 x=x&(x-1); 8 } 9 return countx; 10 } 解答:假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。二、引用2.1 什么是“引用”?声明和...
阅读全文
摘要:Posted by李马on 2007 年 07 月 05 日 From:http://blog.titilima.com/ssdt.html引子2006年,中国互联网上的斗争硝烟弥漫。这时的战场上,先前颇为流行的窗口挂钩、API挂钩、进程注入等技术已然成为昨日黄花,大有逐渐淡出之势;取而代之的,则是更狠毒、更为赤裸裸的词汇:驱动、隐藏进程、Rootkit……前不久,我不经意翻出自己2005年9月写下的一篇文章《DLL的远程注入技术》,在下面看到了一位名叫L4bm0s的网友说这种技术已经过时了。虽然我也曾想过拟出若干辩解之词聊作应对,不过最终还是作罢了——毕竟,拿出些新的、有技术含量的东西才是王
阅读全文
摘要:一般情况下,再打开一个指定文件时会有两种情况(1) 文件不存在。(2) 文件存在。对于第一种情况,ofstream类的对象会默认自动创建一个同名文件;而第二种情况下,ofstream类的对象会默认将该文件的内容删除,问数据输出到该文件做好准备。假如不想使用上面的默认的打开方式,我们可以用oftream或者ifstream对象的构造函数或者open()函数指定一种打开方式,首先来看一下open()函数。open()函数的原型为 void open(const char * fname,int mode);其中参数fname是代表文件名的字符串,第二个参数mode是文件的打开方式,每一位代表一种打
阅读全文
摘要:源:http://www.cnblogs.com/pugang/archive/2012/11/07/2758812.html多年以前由于DLL hell问题人们很少在直接从dll文件导出函数并且直接使用,但是有时候事情的解决方案不是我们可以选择的,今天在解决一个问题的时候,还是不得已选择了一个这样的方式。但是搜索了一下,网上关于这个问题的总结文章都写的不是很全,于是总结出来,希望对大家有所帮助。静态导入和动态导入加起来一共三种方式:静态导入--需要将.lib文件和.dll文件copy到执行目录1. dllexport导出dllimport导入。导出时这样写:__declspec( dllex
阅读全文
摘要:教你初步了解KMP算法作者: July 、saturnma、上善若水。 时间;二零一一年一月一日-----------------------本文参考:数据结构(c语言版) 李云清等编著、算法导论引言:在文本编辑中,我们经常要在一段文本中某个特定的位置找出 某个特定的字符或模式。由此,便产生了字符串的匹配问题。本文由简单的字符串匹配算法开始,再到KMP算法,由浅入深,教你从头到尾彻底理解KMP算法。来看算法导论一书上关于此字符串问题的定义:假设文本是一个长度为n的数组T[1...n],模式是一个长度为m<=n的数组P[1....m]。进一步假设P和T的元素都是属于有限字母表Σ.中的字符。
阅读全文
摘要:每一天你都在使用大量的命令行程序,是不是感觉那些命令行参数用起来比较方便,他们都是使用getopt来实现的。在Linux下使用getopt写程序是一种比较cool的事情,下面来简单的介绍一下getopt的使用。=== getopt使用 ===在讨论参数处理之前,我们先明确两个概念:选项、选项参数gcc -g -o test test.c我们经常使用上面的命令来编译程序,这里g和o就是选项,其中test就是o的选项参数下面我们来看一下getopt:首先是函数声明:#include <unistd.h>extern char *optarg;extern int optind;exte
阅读全文
摘要:环境:VS2010问题;探索重载new和delete后构造函数、修改函数的调用顺序代码: 1 #include <iostream> 2 using namespace std; 3 class C 4 { 5 float x,y; 6 public: 7 C(){ 8 cout<<"调用构造函数"<<endl; 9 }10 ~C(){11 cout<<"调用析构函数"<<endl;12 }13 void show()14 {15 cout<<"x="<&l
阅读全文
摘要:不怎样的一本书,具体表现为:1)该详细讲解的地方,或者一笔带过或者讲得不全面或者讲些不相关内容;2)该略过的地方,反而详细起来;3)有一部分错误,如sizeof不计算static变量的大小之类的。虽说如此,收获还是有的——知道了在笔试中常见的知识点。这里的笔记就是对我不熟悉或者理解不全面的知识点去Google和查书而来的。C++的关键字1. 使用extern "C"的理由函数被C编译器编译后不带参数信息,被C++编译器编译后会带上参数信息。这是因为C++支持函数重载。所以函数被C编译器编译和被C++编译器编译是不同的。例如:void Zero(int lin),被C编译后,
阅读全文
摘要:一个函数形如:void f(float **p){/* 想要在函数体中按二维数组的方式访问*/ p[1][1] = 0;//c++用vc编译ok,运行出错(非法访问)}float **p; //其实这里的p并不是一个二位数组的指针,只不过是一个指向指针的指针像你这样访问肯定是会出问题的。例如:float a[2][2]={0,1,2,3};float **p=(float**)a;//强制将二维数组指针转为指向指针的指针则此时p[0]=0;p[1]=1;p[2]=2;p[3]=3;而p[0][0]=*(*(p+0)+0)=**p;p[0][1]=*(*(p+0)+1);对于p[0][0]:由于
阅读全文
摘要:c++中编译器替我们完成了许多事情,我们可能不知道,但也可能习以为常。下面详细介绍一、初始化与初始赋值首先说说类的初始化与初始赋值之前的区别,这也许里面可能有我们不知道的事情。 其实类初始化与初始赋值还是有区别的。 1 class People{ 2 public: 3 People(std::string name,int age,int height); 4 private: 5 std::string m_sName; 6 int m_iAge;...
阅读全文
摘要:一项目中遇到内存只增不减问题,经折腾,原因如下:源:http://blog.csdn.net/alane1986/article/details/6902233析构函数执行时先调用派生类的析构函数,其次才调用基类的析构函数。如果析构函数不是虚函数,而程序执行时又要通过基类的指针去销毁派生类的动态对象,那么用delete销毁对象时,只调用了基类的析构函数,未调用派生类的析构函数。这样会造成销毁对象不完全。#include<iostream.h>#include<stdlib.h>class CPerson{public:virtual~CPerson();//基类的析构函
阅读全文
摘要:一个很好的例子就是struct unix_address{atomic_t refcnt;int len;unsigned hash;struct sockaddr_un name[0];};#define UNIX_PATH_MAX 108struct sockaddr_un {sa_family_t sun_family; /* AF_UNIX */char sun_path[UNIX_PATH_MAX]; /* pathname */};其中name实际上指向unix_address结构之后的空间。好处就是sockaddr_un是变长的,为了不浪费空间,就这样定义。到实际分配unix_a
阅读全文
摘要:源:http://blog.csdn.net/yah99_wolf/article/details/6172617在第一篇里面,我们已经提纲挈领的讲述了操作步骤,整个过程步骤有8步,但其中有5步你只需要简单的敲一个命令即可,只有剩下的三步需要你动手写一些东西,对应上面步骤中的蓝色黑体字部分,而本篇的重点就是如何在大型项目中完成这三歩。步步为营:三步完成编译配置【第一步:修改configure.ac文件】从上面的步骤可以看到,使用autoscan工具扫描后就会生成一个简单的configure.ac文件,这已经是一个完整的configure.ac文件框架了,但还不足以达到我们的要求,因此我们要在框
阅读全文
摘要:源:http://blog.csdn.net/yah99_wolf/article/details/6172614使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install,使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefile,而且换个编译环境,Makefile还需要修改(Eclipse也是这样)。这么好的东东当然要拿来用了,但GNU的Autotool系列博大精深,工具数量又多,涉及的语言也多,要是自己从头看到尾,黄花菜都凉了,项目估计早就结束了;上网搜样例倒是有一大堆,但都是“hello world”的
阅读全文
摘要:find . -type -f -print0| xargs-0fileprint0是为了是输出的文件名以null结尾,而xargs -0是为了接受以null结果的字符串。安全完美的结合。
阅读全文
1

浙公网安备 33010602011771号