
C/C++
小白的学习笔记
这个作者很懒,什么都没留下…
展开
-
Linux C语言连接MySQL 增删改查操作
Linux下想要测试mysql和memcached的性能,因为是服务器只能通过终端连接,所以考虑用C语言写测试代码。于是研究了把C怎么连接MySQL以及增删改查的代码。安装mysql-client或者编译源码安装mysql后,会有支持C语言写客户端的头文件和库文件,但是目录可能不一样,mysql源码安装见 http://asyty.iteye.com/blog/1442503从网上找了类似转载 2016-12-19 21:36:51 · 1250 阅读 · 0 评论 -
C语言之static静态变量
1. static 变量静态变量的类型 说明符是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。2. 静态局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义 它的生存期为整转载 2016-03-06 10:41:17 · 887 阅读 · 0 评论 -
C语言(int&)
有下面一段C程序,求问输出结果:float a = 1.0f; cout < < (int)a < < endl; cout < < (int&)a < < endl; cout < < boolalpha < < ( (int)a == (int&)a ) < < endl; // 输出什么? float b = 0.0f; cout < < (int)b < < end原创 2016-01-05 12:35:18 · 962 阅读 · 0 评论 -
回溯法 0 1背包问题
用回溯法解决0 1背包问题#include <stdio.h>#include <stdlib.h>/* 用回溯法解决01背包问题,维护的变量有: curState[]: 当前状态中物品是否被选中,若i选中,则curState[i]=1,否则为0. optState[]: 从搜索开始到目前状态中的最优状态。 curWeight: 当前的总重量 curVal原创 2015-06-25 18:00:42 · 737 阅读 · 0 评论 -
一些算法问题(转载)
最近要开始准备面试找工作,算法是准备的重中之重,舍友推荐了《挑战程序设计竞赛》这本书。花了一周的时间大体过了一遍,该书真切地让我理解了“智商是硬伤”这句话的含义。我对它的评价是:如果智商小于120,只看前两章就够了;智商大于120小于150,三四章的简单章节还是可以看一下的;智商大于150,看完本书问题不大。望大家量力而为,否则你的自信心会遭受严重的打击。下面把自己看懂的,并感觉比较重要的转载 2015-09-22 19:01:30 · 1666 阅读 · 0 评论 -
leetcode之 median of two sorted arrays
这是我做的第二个leetcode题目,一开始以为和第一个一样很简单,但是做的过程中才发现这个题目非常难,给人一种“刚上战场就踩上地雷挂掉了”的感觉。后来搜了一下leetcode的难度分布表(leetcode难度及面试频率)才发现,该问题是难度为5的问题,真是小看了它!网上搜了很多答案,但是鲜见简明正确的解答,唯有一种寻找第k小值的方法非常好,在此整理一下。 首先对leetco转载 2015-09-22 19:23:22 · 443 阅读 · 0 评论 -
daxpy dcopy计算
daxpy每秒计算次数:#include <stdio.h>#include <stdlib.h>#include <time.h>#include "cblas.h"#define ARRAY_LENGTH 1000000void main() { int n; /*! array size */ double da;原创 2015-09-21 17:17:50 · 1181 阅读 · 0 评论 -
C语言生成随机数
#include <stdio.h>#include <stdlib.h>#include <time.h>void main (void){ int i ; srand((unsigned)time(NULL)); for(i=0;i<10;++i){ printf ("%d\n" ,rand()); }}原创 2015-09-21 16:44:55 · 625 阅读 · 0 评论 -
C两个宏的例子
定义宏时,括号紧挨在名字后面,尽量给宏的参数加括号 使用#undef消除宏的定义, 因为宏使用的是替换原则,所以比函数要快,而且可以完成函数完不成的任务,比如把参数当类型,如下:#include <stdio.h>#include <stdlib.h>#define MAX(a,b) ((a)>(b)?(a):(b))#define MALLOC(n,type) ((type*)malloc(原创 2015-09-29 12:41:54 · 578 阅读 · 0 评论 -
c malloc calloc realloc
malloc和free函数原型如下:void *malloc(size_t size);void free(void *pointer);malloc的参数就是需要分配的内存字节数。如果内存池中的可用内存满足这个需求,malloc就返回一个指向被分配的内存块起始位置的指针。malloc所分配的内存是一块连续的内存。如果不能满足请求,malloc就返回一个NULL指针,因此,对每个从malloc返回原创 2015-09-11 12:44:11 · 492 阅读 · 0 评论 -
无向图 深度优先遍历 c语言实现
无向图的深度优先遍历的实现,无向图用邻接表表示无向图的表示:邻接矩阵和邻接表。程序使用的示例图为: 实现要点: 每个节点有三种状态-1,0,1,分别表示未发现,已经发现,已经处理。代码如下:#include <stdio.h>#include <stdlib.h>#include "graph_represent.h"//后序遍历图void DFS(struct vNode** adj,i原创 2015-06-22 17:00:47 · 7068 阅读 · 0 评论 -
C语言 常量
C语言使用const声明一个常量,定义方式有两种(const在类型前和const在类型后):const int a;int const b;这两种定义方式没有区别,建议使用一种方式并坚持下去。 声明为常量的值不能被修改,那么怎么给常量赋值呢?有两种方式: 1、在定义的时候赋值const int a = 10;2、声明为const类型的函数形参,在调用时自动获得实参的值void aFunctio原创 2015-09-07 00:33:01 · 644 阅读 · 0 评论 -
CPU计算性能测试程序
计算下面一系列的数学计算在1s中能执行过少次。#include "stdio.h"#include "time.h"int i, j, l, k, m, jj;jj = 2342;k = 31455;l = 16452;m = 9823;i = 1000000;void main() { int warp_count = 0; int max_warp = 1000;原创 2015-06-14 02:34:31 · 5923 阅读 · 0 评论 -
占用linux固定内存大小的小程序
做实验时要使某个程序占用固定大小的内存,这里写了一个小程序,在linux环境下:1、首先使用free -mo -s 2 命令查看系统内存使用量:2、打开另一个终端编写occupy.c源文件如下:#include#include#include#include//要占用100M内存,以字节为单位const int alloc_size = 100*10原创 2015-01-16 16:23:41 · 2192 阅读 · 0 评论 -
《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?
昨天一个同学去网易面试C++研发,问到了这么一个问题:如何限制一个类对象只在栈(堆)上分配空间?一般情况下,编写一个类,是可以在栈或者堆分配空间。但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类。这能不能实现呢?仔细想想,其实也是可以滴。在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。转载 2016-04-03 09:03:15 · 395 阅读 · 0 评论 -
编译原理 (预处理>编译>汇编>链接)(转)
一般高级语言程序编译的过程:预处理、编译、汇编、链接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查、代码调试、汇编语言等。 1、预处理 预处理是C语言程序从源代码变成可执行程序的转载 2016-04-03 09:41:15 · 465 阅读 · 0 评论 -
Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc转载 2016-11-10 10:31:56 · 499 阅读 · 0 评论 -
C++中的访问修饰符
源于牛客网上的一道题目,下列程序编译时会出现错误,请根据行号选择错误位置( ):#include using namespace std;class A{ int a1;protected: int a2;public: int a3;};class B: public A{ int b1;protected: int b2;public: in原创 2016-09-06 10:36:23 · 2163 阅读 · 0 评论 -
C语言结构体赋值问题
本身做Java比较多,直接在C中将一个结构体赋值给另一个结构体时,不太确定会发生什么事。下面写了一个小例子测试。结论是:C结构体直接复制类似于深拷贝,改变被修改的结构体不会影响到原来的结构体。代码:#include typedef struct{ char *name; int age;}student;int main(){ student a,b; a.n原创 2016-08-12 10:08:54 · 2510 阅读 · 0 评论 -
判断一个机器使用的是大端存储还是小端存储
本文节选自《UNIX网络编程》。考虑一个16位整数,它由两个字节组成。内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址,这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址,这称为大端(big-endian)字节序。下面的程序可以判断一台机器是大端存储还是小端存储。#includeint main(int argc, char*原创 2016-08-06 10:44:33 · 1958 阅读 · 0 评论 -
C文件访问 introduce
C文件读写。都忘记怎么操作了,记一下。下面这个程序从一个文件读入数据,写入到另一个文件中。#includevoid readWriteFile(){ FILE *fp_r,*fp_w; char buff[255]; fp_r = fopen("from.txt","r"); fp_w = fopen("to.txt","a"); if(fp_r==NULL || fp_w=原创 2016-07-28 12:02:17 · 794 阅读 · 0 评论 -
C fork introduce
fork的作用是创建一个子进程。fork()函数会返回两次,分别返回为子进程和父进程,靠返回值来区分,如果返回值为0则当前在子进程里面,若返回值大于0则当前在父进程里面。看下面例子:#include #include int main() { pid_t fpid; //fpid表示fork函数返回的值,实际是一个int类型 int count = 0; //fork之原创 2016-07-26 20:50:37 · 466 阅读 · 0 评论 -
c语言socket编程(基础)
Sockets Tutorial 对C语言的socket编程做了详细描述,这里记录一下服务端程序:/* * server.c * * Created on: 2016-7-26 * Author: qiu *//* A simple server in the internet domain using TCP The port number is pa转载 2016-07-26 13:04:07 · 638 阅读 · 0 评论 -
插入排序 快速排序 分析整理
1、插入排序插入排序是将一个元素插入到已经排好序的子序列中,实现下,n表示数组的长度。在排第i元素时,先将第i个元素暂存(temp=a[i]),然后i-1个位置开始依次将比a[i]大的元素后移。最终将a[i]插入到正确位置。//插入排序void insert_sort(int *a,int n){ int temp,i,j; for(i=1;i<n;i++){ temp = a[原创 2015-03-22 10:54:39 · 2300 阅读 · 0 评论 -
C++中的动态绑定
首先说明一下C++中的静态绑定和动态绑定静态绑定:在编译时刻,根据变量的静态类型(变量声明为基类还是派生类)来决定调用哪个函数,用基类声明的,就调用基类的方法,用派生类声明的就调用派生类的方法。动态绑定:在运行时刻,根据变量实际指向的对象类型(该变量指向基类还是派生类)来决定调用哪个函数。C++中对普通函数时采用静态绑定的,对虚函数是采用动态绑定的。可以看下面的例子。 另外C++对虚函数有几原创 2016-03-27 12:04:55 · 1920 阅读 · 0 评论 -
什么是C++虚函数、虚函数的作用和使用方法
我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请查看:C++多态性的一个典型例子)程序中,在Circle类中定义了 area函数,在Circle类的派生类Cylinder中也定义了一个area函数。这两个函数不仅名字相同,而且参转载 2016-03-27 11:26:03 · 471 阅读 · 0 评论 -
C指针解析 右左法则----复杂指针解析
首先看看如下一个声明: int* ( *( *fun )( int* ) )[10]; 这是一个会让初学者感到头晕目眩、感到恐惧的函数指针声明。在熟练掌握C/C++的声明语法之前,不学习一定的规则,想理解好这类复杂声明是比较困难的。 C/C++所有复杂的声明结构,都是由各种声明嵌套构成的。如何解读复杂指针声明?右左法则是一个很著名、很有效的方法。不过,右左法则其实并不是C/转载 2016-03-14 14:22:56 · 495 阅读 · 0 评论 -
vector中erase用法注意事项
vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase( iterator _Where); iterator erase( iterator _First, iterator _Last); 如果是删除指定位置的元素时: 返回值是一个迭代器,指向删除元素下一个元素转载 2016-02-25 23:14:52 · 903 阅读 · 0 评论 -
C语言 函数指针
这里简单介绍函数指针的使用,结合几个小例子。 C语言函数指针是指向函数的指针,利用函数指针可以调用函数,也可以把函数当做参数传递。函数指针变量的声明 跟函数的声明一致,要标明函数的指纹,即函数的参数和返回类型,声明之后函数指针变量只能指向指纹相同的函数(试了一下,并不会报错,但是应该不提倡执行指纹不同的函数吧)。声明的例子如下: void (*funp)(int); 其中funp是一个变量名,原创 2015-08-30 15:50:48 · 651 阅读 · 0 评论 -
无向图的表示:邻接矩阵和邻接表
这里将一个无向图用邻接表和邻接矩阵表示。输入:顶底个数n,图中的各个边(用两个顶点表示)。输出:这个无线图的邻接矩阵和邻接表,其中邻接表中的链接按元素大小升序排列。先给出一个例子说明。假设有无向图如下,则其邻接矩阵和邻接表如提示框中所示(其实就是下面程序的输出)。下面是程序的代码:#include #include //图的表示,输入节点个数和边,构造图的邻接矩阵原创 2015-06-14 06:01:07 · 23301 阅读 · 5 评论 -
C语言大数相除及求余(一种方法)
这里进行大数相除的思路是从被除数中减去除数,每减一次,就将结果加1,知道被除数小于除数为止,从被除数中减去除数使用的是大数减法,结果+1使用的是大数加法(略有不同),但是这样计算很耗费时间,以后希望找到一种省时的算法。算法主要涉及三个函数:void minus(char *a,const char *b); //大数相减,a>bvoid plus_one(char* a);原创 2015-02-10 20:27:30 · 7258 阅读 · 0 评论 -
最大子序列和整理,复杂度从O(n^3)到O(n)
求一个序列的子序列的最大值,这是一个经典算法,这里稍作整理。问题:任给一个整数序列,如{-2, 5, 7, 11, -4, 13, -5, -2, -6, 3, -1, 3},求出这个序列中连续子序列的和的最大值,这个例子中最大值为32,子序列为{5, 7, 11, -4, 13}。方法一:最简单的暴力法。确立一个起点,一个终点,计算起点到终点的和。下面代码中int brute_force原创 2015-03-21 14:49:22 · 1734 阅读 · 0 评论 -
C语言Sleep clock time函数的使用
1、SleepSleep函数的功能是让程序挂起一段时间,第一个字母大写,只在VC中使用,头文件为#include,单位为毫秒,若想挂起120毫秒,可以写为:Sleep(120);在linux gcc中,让程序挂起一段时间的函数为sleep和usleep,sleep的第一个字母小写,sleep的单位是秒,usleep的单位为微妙us,1秒为1000毫秒,1毫秒等于1000微妙,lin原创 2015-03-27 17:25:28 · 3245 阅读 · 0 评论 -
归并排序以及归并排序的优化
1、归并排序的实现归并排序也利用了分治法的思想,首先将序列分成左右两部分,将左右两部分分别排序,然后将有序的两个子序列进行合并(即merge操作),程序是递归进行的,主函数实现如下://归并排序主函数void merge_sort(int* a,int first,int last){ int mid; if(first<last){ mid = (first+last)/2;原创 2015-03-26 14:58:52 · 2449 阅读 · 2 评论 -
C 语言__int64的使用
#include #include #include int main(){ __int64 i; scanf("%I64d",&i); printf("%I64d ",i); printf("%I64d",LLONG_MAX); printf("%lld",LLONG_MAX); return EXIT_SUCCESS;}查看__int64的定义可发现# def原创 2014-12-18 19:40:09 · 3258 阅读 · 0 评论 -
C语言大数阶乘
C语言大数阶乘的思路:1、设置一个整型数组表示最终的结果,整型数组的每一个元素表示结果的每一位,因此,每一个元素不超过9。2、初始化整型数组为1,有效长度为1,将k=1,2,3, ..., n乘到数组中,乘的时候将k与数组的每一个有效元素相乘,如果结果大于9,要处理进位。3、如果乘完之后进位carry仍然不为0,说明最高位有进位,有效长度要增加。代码如下:#include原创 2015-02-19 20:16:10 · 1952 阅读 · 0 评论 -
Eclipse CDT 调用printf/cout 控制台(console)无输出
症状描述:用Eclipse调试程序,执行printf和cout函数,但是console无内容显示。 原因分析:Eclipse输出的内容是保存在buffer中,因此要显示相关内容,就必须刷buffer缓冲区。 解决方案:1.在main函数开始时调用函数 setbuf(stdout,NULL);2.在每个printf函数后调用函数 ffl转载 2014-12-14 19:47:34 · 2185 阅读 · 0 评论 -
C语言大数相乘
C语言大数相乘最简单的就是模拟笔算乘法。首先用两个字符数组接收两个要进行乘法运算的大数,设置为a[ ],b[ ],并用一个整型数组c[ ]保存结果,在进行运算时,a数组第i个位置的数据与b数据第j个位置的数据相乘的结果存在c数据的第i+j个位置。另外两个数相乘,结果的长度不会超过这两个数长度的和。第一步也是按位执行乘法,将位乘法的结果累积到结果数据第二步是进位处理,确保每一位都是个位数原创 2015-02-04 00:34:51 · 1888 阅读 · 0 评论 -
C语言大数相加
当要执行相加的两个数超出C语言所能表示的范围时,就不能用正常的加法运算来执行相加操作,这时候可以用两个字符数组接收要相加的两个大数,然后从两个大数的地位进行按位相加,并设置一个进位标志,如果标志为1,表示有进位,否则没有进位。要注意的是字符数组的地位为数字的高位,所以要从数组下标大的地方开始相加。#include #include int main(){ //a,b数组原创 2015-02-01 16:46:45 · 1938 阅读 · 1 评论 -
linux下 C语言perror函数的作用
头文件 #include #include//注意 不可以掉了这个头文件,perror是包含在这个文件里的//编辑本段perror表头文件完善版定义函数 void perror(const char *s); perror ("open_port");函数说明 perror ( )用 来 将 上 一 个 函 数 发 生 错 误 的 原 因转载 2015-01-16 15:36:12 · 570 阅读 · 0 评论