首页 C++代码编写实例

C++代码编写实例

举报
开通vip

C++代码编写实例风云三号卫星地面应用系统产品质量检验系统(QCS)业务软件开发项目 代码编写实例 QCS项目组 20100804 变更记录表 序号 变更时间 变更人 变更内容 1 STL示例 1.#include  //STL通用算法 2.#include //定义运算函数(代替运算符) 目前在该头文件中可能要用到的方法包括:针对数据块的排序、查找、对集合中的每个元素进行操作(如数组)for_each、移除remove(remov...

C++代码编写实例
风云三号卫星地面应用系统产品质量检验系统(QCS)业务软件开发项目 代码编写实例 QCS项目组 20100804 变更 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 表 序号 变更时间 变更人 变更内容 1 STL示例 1.#include  //STL通用算法 2.#include //定义运算函数(代替运算符) 目前在该头文件中可能要用到的方法包括:针对数据块的排序、查找、对集合中的每个元素进行操作(如数组)for_each、移除remove(remove_if)等。具体实例如下: 【sort用法】: int nvalue[100];    //假设里面放的是-54至55的无序数据 //按照默认的方式进行排序(从小到大) sort(nvalue, nvalue + 100); //按照从大到小的方式进行排序 sort(nvalue, nvalue + 100, greater()); //按照自定义的方式进行排序,假设按照绝对值的大小从小到大排序 bool FabsSort(int nElem1, int nElem2) {     return fabs(nElem1) > fabs(nElem2) ? false : true;     //从大到小     //return fabs(nElem1) > fabs(nElem2) ? true : false; } sort(nvalue, nvalue + 100, FabsSort()); 【find用法】 int nvalue[100]; int *p = NULL; //查找数组中元素值为7的pos p = find(nvalue, nvalue + 100, 7); int n = p – nvalue;    //n即为7在数组中的位置 【for_each用法】 如对L0仪器状态监测对获取到的数据集进行物理量转换操作 //定义一个类对象,进行物理量转换操作,当然也可以定义一个仿函数实现类似的功能 class CLogic2Phy { public:     CLogic2Phy();     void operator()(int &nValue)     {         //假设转换 公式 小学单位换算公式大全免费下载公式下载行测公式大全下载excel公式下载逻辑回归公式下载 为phy = logic * 2 – 1;         nValue = nValue * 2 – 1;            } } int nDataSet[100];      //假设数据集中有100个数据, //定义一个数组保存数据集中的数据   伪码:对nDataSet数组赋值;       for_each(nDataSet, nDataSet + 100, CLogic2Phy());       经过for_each之后,nDataSet中保存的值全部改变了   【remove_if用法】 假设要对提取出来的数据集进行求平均值的操作,要先将数据集中的填充值剔除掉,然后计算剩下来的有效值的平均值: //定义一个类对象 template class CCheckValue { public:     CCheckValue(const T1 &Value)     {         m_Value = Value;     }     bool operator()(const T1 &Value) const     {         return m_Value == Value;     } private:     T1 m_Value; }; int nDataSet[100];      //假设数据集中有100个数据, //定义一个数组保存数据集中的数据   伪码:对nDataSet数组赋值;   //假设填充值为50   int *p = NULL;   p = remove_if(nDataSet, nDataSet + 100, CCheckValue(50));   //经过remove_if之后,所有值为50的元素已经移除到指针p之后了   CMathAlgo oMathAlgo;   double dbAverageNum = 0.0; dbAverageNum = oMathAlgo. Average(nDataSet, p); 【关于list、map、vector的实际用法】 对list容器使用remove_if和sort算法时严禁使用通用算法中的remove_if和sort,而应该使用list的成员方法remove_if和sort。 对vector和map容器使用erase算法时使用严禁使用通用算法中的erase,而应该使用vector和map的成员方法erase。 【关于 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 的实际用法】 template class CMathAlgo { public:     CMathAlgo();     virtual ~CMathAlgo(); InputIterator Max( T itrFirst, T itrEnd)    //最大值 {     return max_element(itrFirst, itrEnd); } //模板类中再定义一个模板函数 template InputIterator Max(InputIterator itrFirst, InputIterator itrEnd, BinaryPredicate Comp)      //最大值     {         return max_element(itrFirst, itrEnd, Comp);     } } bool mod_lesser ( int elem1, int elem2 ) {   if ( elem1 < 0 )       elem1 = - elem1;   if ( elem2 < 0 )       elem2 = - elem2;   return elem1 < elem2; }; CMathAlgo oMathAlgo; int a[3] = {-11, 23, -25}; double dbTemp = 0.0; dbTemp = *(oMathAlgo1.Max(b, b+3)); dbTemp = *(oMathAlgo1.Max(b, b+3, mod_lesser)); 2 数据类型初始化 【1.数组的初始化】 数组的初始化分以下三种形式: char chArr[] = “hello world!” char *pArr = new char [100]; if (NULL == pArr) {     //异常处理部分 } memset(pArr, 0, 100); char chArr[100]; memset(chArr, 0, 100); 【2.结构初始化】 结构体的初始化必须在构造函数中完成,严禁使用memset对结构体进行操作 const int MAX_NAME_LENTH = 10; const int MAX_SEX_LENTH = 10; typedef struct stStudent {     int nNum;            //学号     char chName[MAX_NAME_LENTH];    //姓名     char chSex[MAX_SEX_LENTH];        //性别     stStudent()     {         nNum = 0;         memset(chName, 0, MAX_NAME_LENTH);         memset(chSex, 0, MAX_SEX_LENTH);     } }ST_STUDENT; 【3.枚举的初始化】 枚举常量必须以0开始,并按序递增 typedef enum enColor {     RED = 0,     ORANGE,     YELLOW,     …… }EN_COLOR; 严禁使用以下方式自己定义枚举常量的值 typedef enum enColor {     RED = 3,     ORANGE = 5,     YELLOW = 2,     …… }EN_COLOR; 【4.指针的初始化】 int *p; p = NULL; char *pArr = “hello, world!”; 3 内存的申请方法 【1.栈内存】 严禁申请大数组(大于1M),以防止栈溢出,当数组过大时采用申请堆内存的方式 char chArr[1024 * 1024 * 20];  //在栈中申请20M的内存,容易导致溢出,禁止使用 char chArr[1024 * 20];        //在栈中申请20K的内存,可以使用 memset(chArr, 0, 1024 * 20);    //必须立即进行初始化 【2.堆内存】 //以下为自己申请内存合法的使用方式 步骤1:对指针本身置空 char *pArr = NULL; 步骤2:申请堆内存 pArr = new char [1024 * 1024 * 20]; 步骤3:内存是否申请成功,进行异常调用处理 assert (NULL != pArr); 步骤4:初始化内存 memset(pArr, 0, 1024 * 1024 * 20); 步骤5:使用内存 DoSomething(); 步骤6:释放内存 delete [] pArr;        //注意和new的方式配对 步骤7:指针置空 pArr = NULL; //自己封装的内存申请方法 char * GetMemory(char * &pOut, int nSize)      //自己定义内存申请函数 { pOut = new char [nSize]; assert(NULL != pOut); memset(pOut, 0, nSize); DoSomething(); return pOut; } void FreeMemory(char *p)        //同时要自己定义一个内存释放的函数 { if (NULL == p) {     return; } delete [] p; return; } char *pMem = NULL; GetMemory(pMem, 1024); DoSomething(); FreeMemory(pMem);        //合法 char *pMem = NULL; GetMemory(pMem, 1024); DoSomething(); delete [] pMem;            //非法,严禁此种使用方式,虽然不会出错 //使用OCILIB的方式 OCI_Initialize();    //OCILIB库初始化 DoSomething(); OCI_Cleanup();      //OCILIB库清理 //使用xerces的方式 XMLString::transcode(); DoSomething(); XMLString::release(); 1 类的声明方法 【尽量不要使用父子继承,而使用包含继承】 class CBase { public:     CBase();      //构造 //各种方法 virtual ~CBase();    //析构 }; class CSub : public CBase        //不要这样使用继承 { public: CSub(); //各种方法 ~ CSub(); }; class CSub { public: CSub(); //各种方法 ~ CSub(); CBase oBase;        //使用包含继承 }; 2 附:关于内存使用的思考 【内存使用常见错误1】 void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, "hello world"); printf(str); } 请问运行Test 函数会有什么样的结果? 答:程序崩溃。 因为GetMemory 并不能传递动态内存, Test 函数中的 str 一直都是 NULL。 strcpy(str, "hello world");将使程序崩溃。 【内存使用常见错误2】 char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test 函数会有什么样的结果? 答:可能是乱码。 因为GetMemory 返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原 现的内容已经被清除,新内容不可知。 【内存使用常见错误3】 void GetMemory2(char **p, int num) {     *p = (char *)malloc(num); } void Test(void) { char *str = NULL; GetMemory(&str, 100); strcpy(str, "hello"); printf(str); } 请问运行Test 函数会有什么样的结果? 答: (1)能够输出hello (2)内存泄漏 【内存使用常见错误4】 void Test(void) { char *str = (char *) malloc(100); strcpy(str, “hello”); free(str); if(str != NULL) { strcpy(str, “world”); printf(str); } } 请问运行Test 函数会有什么样的结果? 答:篡改动态内存区的内容,后果难以预料,非常危险。 因为free(str);之后,str 成为野指针, if(str != NULL)语句不起作用。
本文档为【C++代码编写实例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_668482
暂无简介~
格式:doc
大小:53KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-09-20
浏览量:15