随笔分类 - C++
1
摘要:1、strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。/* * 函数介绍:strtok方法,该方法可以将字符串劈开 * 头文件:cstring */#include <iostream>#include <cstring>using namespace std;int main(){ char st
阅读全文
摘要:转自:http://c.chinaitlab.com/ccjq/752270.html int access (const char *pathname, int mode) mode 说明 R_OK 测试读许可权 W_OK 测试写许可权 X_OK 测试执行许可权 F_OK 测试文件是否存在 if (access(pathname, F_OK) == -1)//测试文件权限,测试文件是否存在 { return false;}
阅读全文
摘要:rename()函数将文件或文件夹(linux中文件和文件夹不能重名)的名字修改并移动。如下边的例子中,将当前文件下的名字为1的文件或者文件夹移动为前一级文件leeTest下的2文件或文件夹。前提是leeTest文件下不能有2这个文件或文件夹,否则程序运行失败。#include <stdio.h>int main(){ printf("rename\n"); int flag = rename("./1", "../leeTest/2"); printf("%d\n", flag); return 0;
阅读全文
摘要:多用于告警提示:__FILE__ 包含当前程序文件名的字符串__LINE__ 表示当前行号的整数__DATE__ 包含当前日期的字符串__STDC__ 如果编译器遵循ANSI C标准,它就是个非零值__TIME__ 包含当前时间的字符串代码示例如下:#include <stdio.h>int main(){ printf("file name is %s\n", __FILE__); //文件名 printf("line is %d\n", __LINE__); //行号 printf("date is %s\n", __
阅读全文
摘要:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <afx.h>#include <fstream>#include <iostream>#include <string>#include <sstream>#include <math.h>using namespace std;void getSection(int *section, CString range);CString readINIStr(CString path, CS
阅读全文
摘要:一、在你的程序中使用数据库是不错的注意。如果已经有可用的MySQL服务器,在VC中可以按照如下方法实现与数据库的连接。1、找来MySQL(Win32)安装目录下的include文件夹,将其添加到VC头文件目录列表中;(VC6 -> Options ->Directories -> 加入此目录)(VC2005 ->工具 ->选择 ->项目和解决方案 -> VC++目录 ->显示以下內容的目录 ->包含文件 -> 加入此目录)2、找来MySQL(Win32)安装目录下的lib文件夹,将其添加到VC库文件目录列表中;(VC6 -> O
阅读全文
摘要:转自 : http://www.cnblogs.com/wxxweb/archive/2011/06/01/2065671.html使用setw(n)设置输出宽度时,默认为右对齐,如下:// include <iostream>// include <iomanip>std::cout << std::setw(5) << "1" << std::endl;std::cout << std::setw(5) << "10" << std::endl;std::
阅读全文
摘要:首先需要对虚继承进行了解:(前一篇文章有讲解) 下面的图对一般继承和虚继承很好的解释。一般的继承为Bottom构造时先构造left和right,并且同时为left和right构造各自的Top,这样Bottom中有两个Top。而虚继承Bottom构造时屏蔽了left和right对Top的构造,而是使用自己对Top的构造。下面以一个事例进行分析:如图为继承关系:A中有成员a B中有成员b经过继承: A:a 和 b C中有成员c 经过继承: A:a 和 cD中有成员d 经过继承: B:A:a,C:A:a,B:b,C:c和dE中有成员e 经过继承: D:B:A:a,D:C:A:a,D:B:b,D:C.
阅读全文
摘要:转自:http://blog.csdn.net/littlehedgehog/article/details/5442430感谢作者 这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告:本文是介绍C++的技术文章,假定读者对于C++有比较深入的认识,同时也需要一些汇编知识。本文我们将阐释GCC编译器针对多重继承和虚拟继承下的对象内存布局。尽管在理想的使用环境中,一个C++程序员并不需要了解这
阅读全文
摘要:指向函数的指针就是用指针保存函数的地址具体实现如下:void sub(int a,int b);int _tmain(int argc, _TCHAR* argv[]){ void (*t_vP)(int a,int b); //定义函数指针 t_vP = sub; //对函数指针赋值 (*t_vP)(5,6); //调用函数指针 system("pause"); return 0;}void sub(int a, int b){ cout << (a+b);} 对函数指针赋值那一步需要解释以一下:t_vP = sub ...
阅读全文
摘要:今天做到模版的问题,无法分离定义,在网上找到一些资料,无意间接触到了c++程序的编译过程。经学习理解后总结如下: 对于c++工程中含有很多文件,其中.cpp和.h我们比较熟悉。coder将程序写在这两个文件中,具体的编译和运行由编译器自己去完成。 我们就会提出问题,编译器是如何进行编译的呢。 首先,预编译,就是将一些宏进行替代以及将.h展开到.cpp中。 编译的过程就是将.cpp翻译成二进制代码,保存在.obj中(在debug文件夹中我们可以找到这些文件)。这些文件相当于一个中间文件,为后期的exe的生成做准备。 再之后是连接的过程,就是生成exe的过程。首先从“main.obj”开始,在m.
阅读全文
摘要:转自 : http://www.cppblog.com/michaelgao/archive/2008/10/09/63571.html为什么C++编译器不能支持对模板的分离式编译 刘未鹏(pongba) /文 首先,C++标准中提到,一个编译单元[translation unit]是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp 文件为一个.obj文件,后者拥有PE[Portable Executable,即windows可执行文件]文件格式,并且本身包含的就已经是二进制码,但是,不一定能够执行,因为并不保
阅读全文
摘要:转自:http://www.cnblogs.com/ShaneZhang/archive/2011/07/05/2098553.htmllib是和dll对应的。lib是静态链接库的库文件,dll是动态链接库的库文件。 所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行你的exe的时候不再需要lib。所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。 lib,dll,exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目
阅读全文
摘要:函数模版要注意的地方见注释,代码如下:// test.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>using namespace std;/* * 函数模版的格式为: template<class T> 函数名(函数参数); * 模版函数的实现要和声明放在一起,如果不放在一起,在实现的时候要重新声明template<class T> */template<class T>void add(T a, T b)
阅读全文
摘要:ini文件的读写问题,搞了一下午终于弄好了,纠结呀~~~~~ 一般ini文件读写都是在mfc中完成的,这次要在Console环境中实现。在网上找了好久,都是东抄西抄的,都一样。。。而且都是在mfc下实现的,看来写东西的人越来越少了,让人心寒呀,最可悲的是,转载人家的还大言不惭的写着原创。nm都这么巧,跟人家创的一样。。。。。。废话不多说了。 好了,现在把自己学到的ini读写与大家分享下。 在Console环境中如果头文件写入#include "afx.h";程序会报错,这里需要设置下编译器,我用的是vs2008,项目-属性-常规-mfc的使用,使用mfc。如图:之后再加入#
阅读全文
摘要:1.对于函数后边添加const后,函数成为const类型,该函数中不允许对类中成员进行修改,可以认为是在该函数中,类成为了const类型。另外要注意的是,const函数中只能调用const类型的函数。2.对于const类型的变量来说,只能把const的赋值给非const,不能把非const赋值给const,因为const只能初始化一次,即使定义时初始化,系统也会给予默认的初始化。不能将const转化为非const引用。3.const可以用于重载函数。4.在const函数中,可以修改静态成员,或者mutable修饰的成员5.const 成员只能在构造函数的初始化列表中初始化。6.const in
阅读全文
摘要:// 算法.cpp : 定义控制台应用程序的入口点。//对于堆排序来说,逻辑上是树的形式,实际存储的形式还是数组。只是对下标进行一定的计算获得逻辑上树的形式。//此堆的结构为0号位为根结点,没有左子树,右边接着以1号位置为根结点的子树。#include "stdafx.h"#include <iostream>using namespace std;const int HEAP_SIZE = 13; //堆大小int parent(int);int left(int);int right(int);void Max_Heapify(int [], int, in
阅读全文
摘要:// 算法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <ctime>using namespace std;void QuickSort(int e[], int first, int end);int _tmain(int argc, _TCHAR* argv[]){ srand(unsigned(time(NULL)));//set 种子 int t_nArray[10]; //产生随即数组 for(int i = 0; i < 10; i++)
阅读全文
摘要:之前用endl一直以为它只是一个回车换行的功能,刚刚才知道原来endl还有一个功能使用来刷新缓冲区的。除了endl之外,c++中还有ends,flush,unitbuf,nounitbuf。为什么要刷新缓冲区呢? 一句话,为了让缓冲区的信息立即强制输出。 如: cout << "aaa" << endl;和 cout << "aaa";都能将aaa输出,前一个除了多了一个换行外,它的aaa是被手动强制输出的,而后便一个aaa是系统每隔一段时间进行检测输出的。由于间隔比较短,让人以为和第一种一样,下面有一段代码让你对刷新
阅读全文
摘要:从文件中读出数据,通过eof函数来判断该文件是否结束,但是文件最后的一个字符或者数字被多读一次。比如下面代码: ifstream infile; infile.open("d:\\a.txt"); if(!infile.is_open()) //打开文件 { cout << "失败" << endl; }else { string str; while(!infile.eof()){ infile >> str ; //读入内存 cout << str << endl; } } infile.c
阅读全文
1