c/c++
帐前卒
有道云笔记Server端码农。勤于专研算法架构等诡异的计算机知识。
展开
-
安全问题二三事
最近开始关注安全问题。 同时也在关注由于关注了安全导致的性能问题。第一件事是 微信收藏。 详细的内容点击: 微信公众平台的安全问题。 另外再原文的基础上补充几点:微信公众平台最不安全的地方就是它的内容是通过http方式传输的。只要能抓到包,内容都很容易知道。关键问题就是非常不容易抓到包。 所以微信平台才不使用Https传输。而不使用https传输的第二个原因是因为 https ssl密钥交换协议很原创 2013-09-05 09:34:05 · 1866 阅读 · 0 评论 -
c++继续学习 virtual Destruct function (虚析构函数)
一般类是不写成虚析构函数的。除非你要使用多态的性质。对于一个没有多态性质的类结构而言。子类析构可能会导致父类析构。// TestRef.cpp : Defines the entry point for the console application.//#include #include using namespace std;class A{protec原创 2009-10-02 22:21:00 · 1136 阅读 · 0 评论 -
c++继续学习 error C2243
error C2243: type cast : conversion from "XX" to "OO" exists, but is inaccessible这是为啥米?你应该看看那个XX的定义,是否是class XX : public OO,如果没有写public,或者写成protected,或者是private都不能进行转换。原创 2009-09-29 15:35:00 · 2007 阅读 · 0 评论 -
c++继续学习
很久没有用c++了。最近写起来手生...又发现很多问题(我已经搞不清自己以前是否遇到过了...)。1.类中static变量的初始化问题。如果是const的,那么直接在声明处赋值即可。如果非static,你就需要将类拆成一个.h和一个.cpp文件。只有这样声明在.h中,定义在.cpp中。不会影响使用。也就是说在生成类实例之前就会初始化。如果你将非const的static变量写于一个.cpp文件中原创 2009-09-28 19:16:00 · 918 阅读 · 1 评论 -
KMeans 算法
KMeans最主要是思想是1.播撒K个标识点,K是你要分成几类。2.网络中所有点对这K个点计算距离,并归入最近的一个标识点中。这样就得到K个类3.重新计算这K个类的中心距离。4.是否要更新K个类的中心距离,是否迭代次数为0,如果要更新标识点的位置,并且迭代次数不为0,更新标识点,并跳转回2. 下面是为FPT 写的KMeans算法。这个FPT分裂时只要分成两类,所以就是K=2原创 2009-04-23 17:52:00 · 1594 阅读 · 0 评论 -
c++ enum类型的使用
为了调用方便..我这里就全部写成Public的访问权限.虽然自己知道这样不好。但是时间比较紧张。能省点力气就省点力气。class Status{public: static enum stat{success, failure, duplicate, overflow}; stat st; Status() { st = failure; } Stat原创 2009-04-12 22:14:00 · 2160 阅读 · 0 评论 -
c++ 类中static变量初始化问题
首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数:void Foo(){ static int a=3; // initialize std::cout << a; a++;} 这里的static int a=3只执行了一次。在main中调用Foo()两次,结果为34.将上面的函数改为void Foo(){ static in原创 2009-03-11 12:42:00 · 21484 阅读 · 5 评论 -
c++ template template parameter以及error C3201
最近学c++ template,发现可以使用 template template parameter然后自己编了一段小代码..// template template parametertemplate class CONE = std::deque>class MyClass{public: CONE a; MyClass() { }};原创 2009-03-06 10:47:00 · 2901 阅读 · 4 评论 -
linear线性级排序算法
线性级排序算法需求:需要找到前m个大数,这m个数必须有序。现在有n个数(n>>m)。可以使用大空间但是空间远小于n。这里的含义是连同这n个数都不要占用n的空间。因为数据量太大了。N个数是一个一个生成的。思考:1. 这m个数有序,这当然不是一个排序问题,或者是一个部分排序问题。已知的排序是冒泡,插入,选择,归并,快速和基数排序。2. 冒泡效率低。选择排序的要求原创 2008-12-07 10:41:00 · 1323 阅读 · 0 评论 -
AI 决策树ID3 代码(c++)
源代码工程文件(vs2005)http://d.download.csdn.net/down/1018461/cctt_1过去在网上找了段代码,发现写的代码要改些地方,而且也想顺便练习下自己的c++编码。首先我要建立一个真正的树形结构。于是使用了自己过去的GeneralTree.h(当然这里还是改动些GeneralTree的代码例如增添了些函数,另外把有些私有函数变成了公有函数)。训练原创 2009-02-03 17:13:00 · 4762 阅读 · 4 评论 -
链表类List
这个类是为了给GeneralTree提供Queue队列操作才创建的。因为GeneralTree使用层次遍历的时候,必须要使用这样一个队列。当然如果你没有这样一个队列,但是你在每个节点那里设置了计数器,那么你还是可以完成一个层次遍历操作。这里为了保持GeneralTreeNode的最简单性,所以没有添加计数器属性。下面是List类的具体代码:/** create by chic原创 2009-02-03 14:28:00 · 1539 阅读 · 0 评论 -
GeneralTree 一般树形结构类
这个类用于一般树形,每个节点可以有多个分支,且数目不定。可以看做是二叉树的变形形式。一个节点除了父指针外还有左右两个指针。左指针为孩子节点的起始指针,右指针为同父节点的兄弟节点的指针例如:A的左指针为B,右指针为C,C的左指针为E,右指针为D则,A,C,D为同兄弟节点。B为A的子节点,E为C的子节点。这里使用到了GeneralTreeNode类这个树没有delete操作原创 2009-02-03 13:54:00 · 2948 阅读 · 0 评论 -
GeneralTreeNode 一般树形结构节点类
写这个类是配合GeneralTree这个类的。这个类使用TreeNode基类继承而来。这里有一点要说明的。为了编程的方便,这里TreeNode中的成员属性均设置为Public当然,如果有需求一遍写为protected。当然我这里是为了自娱自乐..所以没有在意太多。TreeNode头文件详见http://blog.csdn.net/cctt_1/archive/2008/08/19/2原创 2009-02-03 09:58:00 · 2073 阅读 · 0 评论 -
关于容器
有时我想知道怎样设计容器类才是合理的。是让用户自己new一个新的对象在放入容器类,还是我隐式的new一个新的对象?这就带来一些问题。如果我隐式为新的对象建立容器类,那么很有可能我以后不好释放。因为对于object来说,是不能使用delete。并且每次都new也带来不小的时间损耗。最简单的方式是不为用户new出新的对象,不delete容器类中的对象。那么假如粗心的用户new出来新的指原创 2009-01-21 16:35:00 · 836 阅读 · 0 评论 -
如何用vs编译c语言,compiler error C1853
这里犯得错误是使用c++的预编译头去编译c语言。如果解决C1853这个错误呢?其实就是对每一个.c文件加上#include "stdafx.h" 然后把.c文件改为.cpp文件然后在把工程属性中的configuration properties中的c/c++中的Precompiled Header中的Create / use Precompile Header 中的User翻译 2008-11-08 19:58:00 · 12111 阅读 · 2 评论 -
vs2005 c++ heap使用push_head()异常invalid heap(bug)
最近想使用STL的heap,我的vs2005 Team Edition For Software Developers版本是version 8.0.50727.42,.Net Framework Version 2.0.50727 .然后看到微软官网的一段使用Heap的代码 // alg_push_heap.cpp // compile with: /EHsc #inc原创 2008-10-14 16:27:00 · 2811 阅读 · 3 评论 -
编程练习——huffman编码
这个类的名字叫huffman Tree,但是不仅仅是生成huffman Tree,因为Huffman树的生成要使用优先队列,也就是堆。stl中其实有这个的实现。但是我机器里的vs2005这个堆的使用有点小bug(估计是stl中使用的就是数组存储,而且数组一旦固定大小,就再也无法改变,其实这样实现失去了堆的某些特性。所以我还是自己实现了一下。顺便练习下。)。刚开始的时候就采用int作为编码的存储单原创 2008-10-25 08:56:00 · 1116 阅读 · 0 评论 -
编程练习——可变长bit数组(bitArray)
其实c++里有bitset这个类,但是bitset使用时必须给定大小。例如bitset c;//这里必须在编码里写死,不能使用变量替代c = 234;我主要是用这个东西来存储可变长的huffman编码。所以这个类对我根本不能用。除非开始就给一个足够大的bitset。所以我创建里一个可变长的bit vector用于存放Huffman编码。在这里内部使用的是__int64,64位原创 2008-10-25 08:45:00 · 2531 阅读 · 0 评论 -
c语言中static使用方法
转载自http://tech.ddvip.com/2009-02/1234594734108774.html 一、c程序存储空间布局 C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数转载 2009-10-27 16:22:00 · 830 阅读 · 0 评论 -
c++中的宏定义 g++中参数
如果定义Debug时才能出现的函数调用,那么就可以这样写:#ifdef DEBUG#define debug(x)/ {/ printf(x);/ }#endif#ifdef RELEASE#define debug(x)/ {}/ #endif原创 2010-01-27 17:03:00 · 5018 阅读 · 1 评论 -
elf file OS ABI invalid
昨天调用第三方库的JNI时发现如下问题:elf file OS ABI invalid问题出自ldd,先看一下ldd的版本号。使用: ldd --version这个问题是因为在ldd 为2.12的机器上编译。拿到ldd 为2.5的机器上去运行加载,然后就挂掉了。解决方法就是使用ldd 2.5的机器编译。原创 2013-08-28 08:14:45 · 14292 阅读 · 0 评论 -
typename的使用问题
今天发现一个问题,有一个函数foo(typename list::iterator it) {}这里如果去掉typename编译有问题。 因为iterator 是一个模版。templateclass list { typename MyIter iterator;}如果类似这样的定义,那么list::iterator前面就需要typename.原创 2013-03-22 14:48:58 · 1339 阅读 · 2 评论 -
笔试面试题 —— 天平称重与二进制
有人曾问帐前卒一道题:至少需要多少个砝码,才能称出1~50g物体?这道题有两个变种: 1.至少需要多少砝码(左物右码),才能称出1~50g物体?2.至少需要多少砝码(砝码可以放在任意一边),才能称出1~50g物体?第一问可以变为: 至少多少个数字相加,可以表示1~50之间的任意数。又可以演变为:如何快速的从一堆苹果中取出你想要的个数?第一问对于每个数字其实就是两种状态,加、不加。也就是1,0. 对原创 2013-02-27 22:38:52 · 2164 阅读 · 0 评论 -
c/c++ error C2614: illegal member initialization: is not a base or member
这个错误是因为在初始化列表中初始化了非成员函数或者非基类错误示例:class A{protected:int size;}class B: public A {B(const A& a): ok(0), size(a){ // error, 因为初始化了 size // size 是 a的成员函数,虽然被B所继承,但是仍然不能在初始化列表中初始化。}priva原创 2012-08-12 18:52:05 · 7458 阅读 · 0 评论 -
c/c++ error C2663 overloads have no legal conversion for 'this' pointer
这个错误很大可能是由 const 类型的变量调用了非const类型的函数。例如:class A{public: int size() {// return somthing};};class B{public: int getSize(const A& a) { // error. a是const类型,必须调用const functi原创 2012-08-12 18:44:53 · 2864 阅读 · 0 评论 -
windows开发各种细节.....
<br />我发现windows自己的API一般不能做到与windows自己的历史兼容。很神奇...<br />下面几个函数都前后不兼容.<br />例如GetFileTime这个函数。本来是得到文件的读写时间。但是因为windows自己很有趣,自己的的读写时间其实并不是用户真正的读写时间。当然可能人家考虑了效率等其他的问题。下面一段是摘抄自MSDN中的介绍:<br />Not all file systems can record creation and last access times and no原创 2010-11-09 20:29:00 · 102 阅读 · 0 评论 -
MFC CString wstring char wchar _T 关系及转换
MFC CString wstring char wchar _T 关系及转换LPSTR , LPCSTR,LPCTSTR,LPCWSTR,LPTSTR,WideCharToMultiByte原创 2010-09-07 15:07:00 · 3739 阅读 · 0 评论 -
快速生成大文件
<br />在linux下如果不考虑断电系统重启等其他原因可以使用ftruncate()函数,这个函数输入参数为file descriptor 和 offset, 这个函数在unistd.h中,windows一般是用不了这个的。<br />另外使用文件名得到文件描述符的方法就是int fileno(FILE*); 注意之后别忘了fclose(),下面的代码里忘记写了。<br />#include<iostream>#include<cstdio>#include<unistd.h>using n原创 2010-08-19 20:48:00 · 1660 阅读 · 0 评论 -
static 关键字用途
<br />copy from http://www.cnitblog.com/ictfly/archive/2006/11/25/19594.html<br /> <br />本文只是本人对C++中关于静态类型的一个总结,如错误之处,请大家帮我改正。我分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明static在类中的作用。 <br /><br />一、在面向过程设计中的static关键字 <br /><br />1、静态全局变转载 2010-06-21 10:47:00 · 837 阅读 · 0 评论 -
在ubuntu下生成大文件,并测试文件读写效率
在ubuntu或者其他的linux下生成大文件,必须使用编译参数-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64.否则生成的文件一定是2G左右的,原因是fseek,这个函数中的offset参数是一个long型的或者是size_t型的,在fseeko中是off_t,但是这个off_t默认还是32位,只有加了-D_FILE_OFFSET_BITS=64的原创 2010-05-23 21:40:00 · 3047 阅读 · 1 评论 -
stl upper_bound函数实现
<br />写了一个upper_bound的实现。其中递归使用二分法求解最上界,虽然写的完全不像STL的风格,但是练手还是可以的。<br />#include<iostream>#include<iterator>#include<cstring>#include<cassert>using namespace std;int UpperBound(int* a, int start, int end , const int& value){ int mid = 0; int i原创 2010-07-13 19:50:00 · 1301 阅读 · 0 评论 -
linux pthread_join使用
这个函数没有什么好说的。其实就两个参数,第一个是线程变量,第二个是线程返回值。其函数原型为:int pthread_join(pthread_t thread,void** result);不过查阅许多网上资料,依旧没有使用result这个形参的。一般的使用为pthread_join(thread,NULL);于是自己在想那个NULL能做啥米用。于是写下下面的代码:#include原创 2010-04-02 22:01:00 · 3041 阅读 · 0 评论 -
yacc lex 使用中错误信息解决解决方案
ex3.y: In function ‘yyerror’:ex3.y:32: warning: incompatible implicit declaration of built-in function ‘printf’这一条是因为.y缺少头文件。在.y文件中需要在%{....%}之中写入#include 等头文件。如果只有printf那就只用这个头文件就行了。 ex原创 2010-03-18 19:19:00 · 12772 阅读 · 0 评论 -
yacc与lex入门
转自Ashish Bansal (abansal@ieee.org), 软件工程师, Sapient 公司 LexLex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义,这个我们一会儿就要讨论。一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。当 Lex 接收到文件或文转载 2010-03-18 11:20:00 · 1701 阅读 · 1 评论 -
expected primary-expression before "double"
如果你定义了个模板函数例如:templatevoid write(fstream & f, T &a){ ....} 那么在调用时写write(f,a); 就有可能出现expected primary-expression before "double"的错误。这是因为有可能有的头文件中有write这个函数,并且它不是模板函数,那么就会导致expected p原创 2010-01-04 09:00:00 · 15643 阅读 · 0 评论 -
variable 'std:ofstream' has initializer but incomplete type
variable std:ofstream’ has initializer but incomplete type或者是 variable std:ifstream’ has initializer but incomplete type其原因是因为没有包含fstream这个头文件。 #include#include#include using namespa原创 2010-01-03 21:51:00 · 10639 阅读 · 0 评论 -
c系语言中extern详解
转载自:http://www.cnblogs.com/luliang/archive/2008/08/21/1272746.html1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个转载 2010-03-09 10:58:00 · 1015 阅读 · 0 评论 -
编程练习——堆heap
因为vs2005中c++的Heap构造有些问题,所以才重写了heap类。不知道vs2008中这个是不是个bug。 /* created by chico chen* date 2008/10/25*/templateclass T,class Cmp>class Heap{private: vector heap; void Sh原创 2008-10-25 08:37:00 · 1197 阅读 · 0 评论 -
Compiler Error C2071
今天在编程时遇到这个错误错误提示:error c2071::illegal storage class然后在msdn上查了下:Compiler Error C2071Error Message identifier : illegal storage classidentifier was declared with an invalid storage原创 2008-10-22 22:46:00 · 4437 阅读 · 0 评论 -
给作业加个数字签名
当了数据结构的助教,还要修改作业。在学生们的作业本上留下了对错号。但是没有写其他的东西。为了防止有学生来冒充我的笔迹来自行打对错号,然后声称没有给分这种现象的发生。我花了一个小时做了一个数字签名。因为我的笔迹很烂,很容易模仿。代码如下:基本原理使用的Hash散列。所以不知道签名数据的人,绝对可能从自己作业的签名中获取签名数据,自然也不可能去冒充一个签名。我使用的mysql的散列函数原创 2008-03-11 20:15:00 · 989 阅读 · 1 评论