![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
成魔的羔羊
在路上
展开
-
c++中常用的计算程序运行时间的方法
方法1:计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数定义原型为:clock_t clock(void);这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。clock_t是一个长整形数。另外在time.h文件中,还定...转载 2018-10-10 09:52:43 · 3679 阅读 · 0 评论 -
c语言 float 保留小数点后两位数字
挺实用的小技巧。float sp = 36.51647;sp=( (float)( (int)( (sp+0.005)*100 ) ) )/100;转载 2017-10-28 18:12:21 · 38887 阅读 · 1 评论 -
C/C++中的Split函数(字符串自动分割)
strtok()用来将字符串分割成一个个片段。参数str指向欲分割的字符串,参数delimiters则为分割字符串,当strtok()在参数str的字符串中发现到参数delimiters的分割字符时则会将该字符改为'\0'字符。在第一次调用时,strtok()必需给予参数str字符串,往后的调用则将参数str设置成NULL。C/C++中的Split函数是strtok()其函数原型如下:转载 2017-10-10 21:01:08 · 5092 阅读 · 0 评论 -
std::vector : 用法与技巧
1.介绍这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作。本文中还讨论了条件函数和函数指针在迭代算法中使用,如在 remove_if()和for_each()中的使用。通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了。2.Vector总览vector是C++标准模板库中的部分内容,它是一个多功能转载 2017-03-17 17:45:44 · 1629 阅读 · 0 评论 -
memset用法详解
1。void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。2。例子#includevoid main(){char *s="Golden Global View";clrscr();memset(s,'G',6);printf("%s",s);getchar()转载 2017-09-16 11:53:40 · 717 阅读 · 0 评论 -
Debug Error! R6010 -abort() has been called
VS2010+C++发生调试错误,原因可能是两个线程(或者方法)同时读写一个变量造成的原创 2017-07-10 18:37:14 · 2565 阅读 · 0 评论 -
memcpy的用法总结
1、memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数;函数原型:void *memcpy(void *dest, void *src, unsigned int count);用法:(1)可以拷贝任何类型的对象,因为函数的参数类型是void*(未定义类型指针),也就是说传进去的实参可转载 2017-05-03 14:56:17 · 185777 阅读 · 4 评论 -
在C语言中,double、long、unsigned、int、char类型数据所占字节数
16位编译器char :1个字节char*(即指针变量): 2个字节short int : 2个字节int: 2个字节unsigned int : 2个字节float: 4个字节double: 8个字节long: 4个字节long long: 8个字节unsigned long: 4个字节32位编译器char :1个字节char*转载 2017-05-04 12:35:02 · 668 阅读 · 0 评论 -
Structure 和Class的比较
平时不注意,今天在网上看到这个标题,感觉自己也是搞不清楚,索性拿来学习了,不过他说的是C#中的区别,自己又找了找其他语言的区别,感觉面向对象语言中,两者的区别大同小异~下面要是有说的不对的地方,请多多指点,因为有些纯属自己的观点而已~嘿嘿区别:结构是一种用关键字struct声明的自定义数据类型。与类相似,也可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等,不过,转载 2017-05-11 10:46:27 · 1646 阅读 · 0 评论 -
C文件读写函数介绍
1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串 含义 "r" 以只读转载 2017-05-02 16:46:30 · 245 阅读 · 0 评论 -
string转换为LPCWSTR
以下内容,编译可以通过std::wstring s2ws(const std::string& s){ int len; int slength = (int)s.length() + 1; len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); wchar_t* buf = n转载 2017-10-12 21:03:20 · 1916 阅读 · 0 评论 -
MFC 之树控件篇
CTreeCtrl m_wndMyTree;1) 取得树的当前选中节点:HTREEITEM hSelectedItem = m_wndMyTree.GetSelectedItem();2) 取得指定节点的标签值(也就是Caption):CString strCaption = m_wndMyTree.GetItemText(hSelectedItem);3) 记住:MFC中的树转载 2017-10-23 21:33:17 · 539 阅读 · 0 评论 -
一个项目引用另一个项目时,引用.h后发现.cpp没有链接上
在做项目时,一个项目引用另一个项目时,引用.h后发现.cpp没有链接上,会报错,具体为 某些函数无法识别。虽然被引用的项目是生成dll,但是包含此dll也不能正常使用,最后发现原因是由于被引用项目的类没有被导出,类导出即要生成静态库.lib,然后其他项目链接上此.lib后才会正常使用。 1.导出函数 新建“win32项目”,在“应用程序设置”中选择dll。新建...原创 2018-09-27 09:01:15 · 1374 阅读 · 0 评论 -
LIB和DLL的区别与使用
转这篇文章是因为以前有个误区,以为lib为静态库,dll为动态库,这理解并不错,但不全面。lib分两种的:(1) lib包含所有内容的静态库,应用程序用它即可,这是我理解的一种(2) lib只包含头部信息,为了配合dll使用,dll包含函数内容,这先前我不知道,以为dll本身包含了函数地址及内容。此时,可以观察出lib比dll小很多:curllib.dll 190KBcur...转载 2018-09-27 08:56:50 · 353 阅读 · 0 评论 -
std::vector的几种遍历方式比较
std::vector是我在标准库中实用最频繁的容器。总结一下在遍历和创建vector时需要注意的一些地方。 在不考虑线程安全问题的前提下,在C++11中有五种遍历方式。方式一for (size_t i =0; i < vec.size(); i ++) { int d = vec[i]; } 方式二 s...转载 2018-09-10 11:03:20 · 9221 阅读 · 0 评论 -
字符串格式化,不足位数的补0
int = 123;str = "字符串" --下面的%s对应参数str, %i对应参数intstr = string.format("这是字符串:'%s' 这是数字值 %i",str,int);win.messageBox(str);--%05i表示格式化为至少五位的数字,不足在前面补0str = string.format("%05i",int);win.messageBox(str);...转载 2018-09-06 18:45:31 · 10878 阅读 · 0 评论 -
C++ 删除、重命名文件
int main(){ string path="H://test";//测试路径 remove("H://test/a.txt");//删除文件 rename("H://test/b.txt","H://test/c.txt");//将b.txt重命名为c.txt return 0;转载 2018-09-08 15:55:10 · 8236 阅读 · 2 评论 -
C++创建输出文件与相对绝对位置
FILE *jianli; //加上这句话,创建一个FILE类型的指针,格式不能变,指针的变量名可改变,如改变后面用到该变量名的都要一起改jianli=fopen("e:\\yyy\\1.txt","w"); //创建一个文件,在盘e:\yyy目录下,你可以改变目录名,但是单个\要变成2个\\,后面的子目录也是2个\\fprintf(jianli,"aa=%d",11); //在创转载 2017-10-22 10:40:57 · 4956 阅读 · 0 评论 -
断字符串是否相同,使用compare方法
在C++中使用std::string编写字符串相关操作时,我经常使用find方法,其实在有些场景下需要判断字符串是否相同,因而需要使用compare方法。下面是我的测试样例:[cpp] view plain copy//description: 演示String::compare函数的用法,比较两个字符串是否相等? //compile:转载 2017-10-17 11:08:02 · 407 阅读 · 0 评论 -
C#DLL托管c++ (CLI) String^ 到 std::string 的相互转化
当使用C++/CLI包装C++本地代码时,常常需要将System::String转换为std::string或者char*以调用native C++函数。.net环境中的字符串是unicode的,占2个字节,而很多native C++函数都没有考虑unicode,这种转换不仅仅是2字节转1字节,同时也涉及到字符集的转换。#include "stdafx.h" #include转载 2017-10-25 16:40:34 · 8407 阅读 · 0 评论 -
C++调用C#的DLL实现方法
本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件。具体的实现步骤如下:一、创建C# DLL,需要指定应用类型为“类库”,代码namespace CSLib{ public class Class1 { private string name; public string Name { get {转载 2017-10-25 16:36:23 · 11951 阅读 · 1 评论 -
C++ 栈和队列的使用
要使用标准库的栈和队列,首先得添加头文件#include #includeusing namespace std;定义栈:stack curStack;定义队列:queue curQueue;栈的操作: curStack.empty() 如果栈为空返回true,否则返回false;转载 2017-04-11 15:31:44 · 449 阅读 · 0 评论 -
cout<< 精度控制 setprecision、fixed、showpoint的用法总结
cout其实是std::coutstd::代表标准库全局域std::ios∷fixed代表全局域下有个类ios,ios类中有个常量fixed。std::setiosflags(std::ios∷fixed)设置小数。std::setprecision(4); //设置精度#include 头文件必须包含,这个没什么好说的,上面的都在iomanip中定义。转载 2017-03-23 22:45:45 · 19690 阅读 · 3 评论 -
深入C++ string.find()函数的用法总结
#include #include using namespace std; void main(){复制代码 代码如下: ////find函数返回类型 size_typestring s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");string flag;string::size_type position;//f转载 2017-03-23 16:32:35 · 4391 阅读 · 0 评论 -
osgEarth2.7+vs2010+win7编译方法
1、首先在osg3.2目录中新建一个osgEarth文件夹,将所有包都下载到此文件夹中。2、下载相应的源码包以及依赖包,可在:http://pan.baidu.com/s/1o70sB6E 密码:n9l6,下载,它包括以下包,如下图所示:3、首先解压curl-7.46.0.zip,然后在curl-7.46.0目录中新建一个build,如下图所示:4、打开CMake,将c转载 2016-06-19 21:44:51 · 2434 阅读 · 1 评论 -
两个诡异的vector迭代器操作错误!
osg::vec3Array va; /*1*/osg::Vec3Array::iterator iter=va->begin();for(;;){osg::Vec3 bpos(*iter);//赋值iter++;osg::Vec3 epos(*iter);if(iter!=va->end()) /*2*/{}}1.迭代数组未开原创 2016-11-29 12:20:31 · 612 阅读 · 0 评论 -
c语言在双引号内引用变量
例如:在读取文件的时候必须要引用变量定义a=1然后读取文件的时候要用("c:\\a.bmp")来读取解决:先把a转换成字符串再把它们连接起来可以这样char filename[255] = "";int a = 1;sprintf(filename,"c:\\%d.bmp",a);后面直接引用filename就行了原创 2016-10-09 16:09:46 · 6167 阅读 · 0 评论 -
fopen()和fclose()的用法
一定要养成打开文件到使用玩完后关闭文件,否则该文件后面不可用。1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路径和文件名两部分。如:"B:TEST.DAT""C:\\TC\\TEST.DAT"注意:如果将路径写成"C:\转载 2016-06-23 13:30:41 · 1507 阅读 · 0 评论 -
CString文件路径 使用fopen打开
一般文件都是通过文件打开对话框获得的,文件路径是CSTring类型。有些人比较钟爱C语言的File格式,因此希望使用fopen函数,而该函数的第一个参数(文件路径)是char *类型的,故没法直接使用cstring类型。如果将cstring转成char *貌似也不行,因为cstring中隐藏了一些特殊字符的转义,如‘/’,这样在转换后的char *里没法识别文件路径。本人尝试通过在每个‘/’之后再转载 2016-06-23 12:22:37 · 1686 阅读 · 0 评论 -
osgOcean+VS2010+Win7编译方法
1、首先要下载osgOcean-Source-1.0.1包,以及依赖包osgOcean-Resources-1.0.1、fftss-3.0-20071031,可在:链接:http://pan.baidu.com/s/1qXlu8A4 密码:hdbx,下载2、下载好之后,在D盘的osg3.2文件夹下创建一个osgOcean文件夹,并将下载的源码放到该文件夹下,并解压,如下图所示:3、转载 2016-06-19 21:43:08 · 865 阅读 · 1 评论 -
MFC使用按钮控件,满足条件下可用或者不可用
如果是绑定的菜单,响应UPDATE_COMMAND_UI消息,响应函数中pCmdUI->Enable(控制变量);然后在按钮中修改控制变量就可以了。如果是自定义菜单,获取子菜单对应的MENUITEM指针,同样是Enable控制。void COpenGLView::OnUpdateWanderfly(CCmdUI *pCmdUI){ // TODO: 在此添加命令更新用户界面处理程序代码原创 2016-06-19 12:14:16 · 1397 阅读 · 0 评论 -
MFC 打开保存文件对话框
一、打开文件夹:1、CFileDialog实现CFileDialog hFileDlg(TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_READONLY, TEXT("支持的图像文件 (*.jpg;*.gif;*.bmp;...)|*.jpg;*.gif;*.bmp|专用Tiff图像文件(*.tiff;*转载 2016-06-18 14:31:53 · 769 阅读 · 0 评论 -
CArray的类成员函数和使用方法详解
CArray基础C++并不支持动态数组,MFC提供了一个CArray类来实现动态数组的功能。有效的使用CArray类,可以提高程序的效率。MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。一、CArray类的构造函数CArray是从CObject派生,有两个模板参数,第一个参数就是CArr转载 2016-06-17 10:11:20 · 1783 阅读 · 0 评论 -
枚举类型enum用法
枚举常量是枚举类型中的值,即枚举值。枚举类型是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为: enum {}; 它是一条枚举类型定义语句,该语句以enum保留字开始,接着为枚举类型名,它是用户命名的一个标识符,以后就直接使用它表示该类型,枚举类型名后转载 2016-12-06 19:33:16 · 44294 阅读 · 1 评论 -
利用CSpreadSheet类,处理C++与excle之间的读写
CSpreadSheet.类将相关的dll与lib已经包装,用的时候可能出现lib链接不上的问题,主要是由于版本问题(VS),常见问题如下:1、对于微软的excel,用程序操作的话,有封装好的类。就是CSpreadSheet.h 和 CSpreadSheet.cpp。这个在CSDN上面可以下载。具体地址:http://download.csdn.NET/detail/happyeggp转载 2017-03-02 10:24:16 · 1044 阅读 · 0 评论 -
(c++)两个类相互包含引用的问题
在构造自己的类时,有可能会碰到两个类之间的相互引用问题,例如:定义了类A类B,A中使用了B定义的类型,B中也使用了A定义的类型class A{ int i; B b;}class B{ int i; A* a;}请注意上面的定义内容,一般情况下是不能出现类A,类B相互引用都定义对象,即如下的样子:class A{ int i;转载 2017-03-29 21:55:41 · 439 阅读 · 0 评论 -
关于“不能实例化抽象类“错误的解决办法
大家好!这篇文章我讲解一个编程中遇到一个错误,那就是提示”不能实例化抽象类的错误“,在输出窗口有如下的错误提示信息,如下图:根据具体情况不同,可能涉及到的类也可能不同,但是道理是一样的,之所以出现这样的错误呢,其实是因为,你继承的类的抽象方法没有在继承类中进行重写,比如在这里,我从CView类继承了一个类CTrlee类,但是我没有重写OnDraw函数,然后就进行了对CTrlee转载 2017-03-29 17:46:20 · 16773 阅读 · 0 评论 -
各种排序算法的比较
1.稳定性比较插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的选择排序、希尔排序、快速排序、堆排序是不稳定的2.时间复杂性比较插入排序、冒泡排序、选择排序的时间复杂性为O(n2)其它非线形排序的时间复杂性为O(nlog2n)线形排序的时间复杂性为O(n);3.辅助空间的比较线形排序、二路归并排序的辅助空间为O(n),转载 2017-03-20 16:31:41 · 274 阅读 · 0 评论 -
【C++11】新特性——auto的使用
C++11中引入的auto主要有两种用途:自动类型推断和返回值占位。auto在C++98中的标识临时变量的语义,由于使用极少且多余,在C++11中已被删除。前后两个标准的auto,完全是两个概念。1. 自动类型推断 auto自动类型推断,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推断,可以大大简化我们的编程工作。下面是一些使用auto的例子。转载 2017-03-19 21:35:42 · 208 阅读 · 0 评论 -
C++遍历中删除std::map元素
在std::list中删除一个元素非常简单,直接使用erase方法即可,代码如下:for(iter = list.begin(); iter != list.end();) {if (shouldDelete(*iter))iter = list.erase(iter);else++iter;}或者更简单点list.erase(std::remove_if(转载 2017-03-19 21:26:36 · 1049 阅读 · 0 评论