
c++
QilongPan
这个作者很懒,什么都没留下…
展开
-
一个好用的C++的json库
https://blog.youkuaiyun.com/zhangpeterx/article/details/92645056原创 2020-04-16 10:54:04 · 283 阅读 · 0 评论 -
网络编程
https://blog.youkuaiyun.com/tantion/article/details/865025291.send ,recv说明https://www.jianshu.com/p/affc29ecce9a原创 2019-11-05 14:40:10 · 128 阅读 · 0 评论 -
删除vector指定下标的元素
//删除vector中指定下标的元素,加&可以改变vector的值,不加就不会改变void ControlCards::deleteCard(vector &cards,int index) { vector::iterator it = cards.begin()+index ; cards.erase(it);}原创 2016-07-08 16:12:58 · 6450 阅读 · 0 评论 -
无符号整数
计算机里的数是用二进制表示的,最左边的这一位一般用来表示这个数是正数还是负数,这样的话这个数就是有符号整数。如果最左边这一位不用来表示正负,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整数。中文名无符号整数学 科数学属 性整数词 性名词目录1有符号整数和无符号整数差别2编程▪c语言无符号整数怎转载 2016-07-22 09:53:55 · 2597 阅读 · 0 评论 -
STL迭代器
迭代器 http://blog.youkuaiyun.com/touzani/archive/2007/06/08/1643859.aspx迭代器(iterator)是连接容器和算法的纽带,为数据提供了抽象,使写算法的人不必关心各种数据结构的细节。迭代器提供了数据访问的标准模型——对象序列,使对容器更广泛的访问操作成为可能。泛型编程的关键所在,就是如何找到一种通用的方法,来访问具有不同结构的各种容转载 2016-09-20 22:08:10 · 218 阅读 · 0 评论 -
数组和指针背后——内存角度
聊过数组和指针的区别,主要是对于数组和指针在内存中的访问方式加以区分,这篇博文则从更深层的角度剖析数组和指针的联系如果你也对底层感兴趣、我向这篇文章会对你有所帮助,什么时候数组和指针相同(When an Array Is a Pointer )在实际应用中,他们可以互换的情形要大大多于不能互换的情形。首先再回顾一下声明和定义,(上一篇中有提到这里在深入一下)声明本身还可以进一步分为转载 2016-10-16 10:12:00 · 301 阅读 · 0 评论 -
C++ 中 i++ 与 ++i 的本质区别
C++ 中的 i++ 和 ++i 是一对十分简洁但最容易让人忽视的操作,我已经对它们忽视了十多年,直到近日做一些迭代器时才有所体悟。在刚开始学习C++时虽然知道它们在加一操作上有一个先后的区别,但很难记住这个先后顺序,而且觉得只要不连带赋值操作时它们是等效的,所以也就没有花大力气去辨析它们,而是养成了单独使用它们的习惯,而且习惯性地只使用i++一个操作符。后来经常在转载 2016-11-30 16:13:51 · 659 阅读 · 0 评论 -
C++标准转换运算符const_cast
前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:c转载 2016-11-30 17:03:19 · 227 阅读 · 0 评论 -
inline用法详解
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,inline...转载 2016-05-23 19:31:01 · 433 阅读 · 0 评论 -
C++中的inline用法
一、inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) ((Var1)+(Var2))*((Var1)-(Var2))为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效转载 2016-12-01 14:36:57 · 259 阅读 · 0 评论 -
C++析构函数
析构函数(destructor)也是一个特殊的成员函数,它的作用与构造函数相反,它的名字是类名的前面加一个“~”符号。在C++中“~”是位取反运算符,从这点也可以想到,析构函数是与构造函数作用相反的函数。当对象的生命期结束时,会自动执行析构函数。具体地说如果出现以下几种情况,程序就会执行析构函数:如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对转载 2016-12-01 14:45:58 · 365 阅读 · 0 评论 -
c/c++ int _tmain(int argc, _TCHAR* argv[])
在visual c++ 2005/8 中,当选择编辑一个32位Win32控制台应用程序时.初始状态下系统自带函数: int _tmain(int argc, _TCHAR* argv[]) { return 0; } 上述Win32控制台应用程序的入口程序是用来存放机器的一个环境变量的,如:机器名,系统信息等. 其中: int arg原创 2016-12-02 15:00:12 · 681 阅读 · 0 评论 -
C++常见编程错误
1.using声明只作用于名字空间中的单一项,在进行using声明时使用namespace关键字是错误的:namespace gar{ void f(){ } int x;}using namespace gar::f();正确的语法为:amespace gar{ void f(){ } int x;}原创 2016-12-01 15:05:10 · 742 阅读 · 0 评论 -
C++中公有继承、保护继承、私有继承的区别
公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。私有继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员;派生类转载 2016-12-04 09:47:00 · 303 阅读 · 0 评论 -
C++虚基类的作用
虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:public CDerive1转载 2016-12-04 09:57:52 · 543 阅读 · 0 评论 -
基本搜索算法
博弈树搜索技术简介:博弈树的搜索算法,负值极大搜索,alpha-beta搜索,渴望搜索,PVS极窄窗口搜索等。通常来说,搜索算法常常和以下技术联合在一起。如下:1.置换表,记录已经搜索过的棋局,避免再次搜索。2.吃子启发,优先试下能够吃对方棋子的走法。3.杀手启发,历史启发简化版。4.历史启发,优先试下历史统计数据得出的比较好的走法。5.静止期搜索,继续对某些叶子结点搜转载 2017-01-14 09:48:31 · 937 阅读 · 0 评论 -
标准C++中的string类的用法总结
相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的str转载 2017-02-20 13:39:35 · 490 阅读 · 0 评论 -
C/C++中的getline函数总结
getline函数是一个比较常见的函数。根据它的名字我们就可以知道这个函数是来完成读入一行数据的。现在对getline函数进行一个总结。在标准C语言中,getline函数是不存在的。下面是一个简单的实现方式:int getline_(char s[],int lim){ int c,i; i=0; while((c=getchar())!=EOF&转载 2017-02-20 13:43:20 · 4337 阅读 · 0 评论 -
详细讲解进程间通讯的四种方式
进程间通讯的四种方式:剪贴板、匿名管道、命名管道和邮槽第一种:剪贴板(1)新建一个基于对话框的应用程序,并设置好如下界面:(2)分别编辑发送按钮和接收按钮的代码:[cpp] ?void CClipboardDlg::OnBtnSend() { // TODO: Add your control notification handler code here转载 2017-02-20 16:12:22 · 908 阅读 · 0 评论 -
C/C++经典源代码网站
C/C++经典源代码网站50个c/c++源代码网站C/C++是最主要的编程语言。这里列出了50名优秀网站和网页清单,这些网站提供c/c++源代码。这份清单提供了源代码的链接以及它们的小说明。我已尽力包括最佳的C/C++源代码的网站。这不是一个完整的清单,您有建议可以联系我,我将欢迎您的建议,以进一步加强这方面的清单。1、http://snippets.dzone.com/tag/c转载 2017-03-02 14:36:13 · 1819 阅读 · 0 评论 -
stringstream的用法
使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库来实现安全和自动的类型转换。为什么要学习如果你已习惯了风格的转换,也许你首先会问:为什么要花额外的精力来学习基于的类型转换呢?也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int类型转换转载 2017-03-05 13:58:20 · 198 阅读 · 0 评论 -
istringstream用法
1.istringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。[cpp] view plain copy #include #include using namespace std; int main() { string str, line; while(getline(cin, line)) { istrin原创 2017-03-05 14:07:44 · 4790 阅读 · 0 评论 -
GetPrivateProfile系列函数
string strPath(CONFIG); strPath += "\\LOG.ini"; cout<<strPath<<endl; int res = WritePrivateProfileStringA("section", "key1", "123", strPath.c_str());//0表示失败,非0表示成功 cout<<res<<endl;转载 2017-03-05 14:17:57 · 2509 阅读 · 0 评论 -
STL中erase()小心使用
erase()函数的功能是用来删除容器中的元素删除某个容器里的某个元素:c.erase(T);看似一个简单的动作,然而对不同类型的容器,内部却做了截然不同的事情,后面介绍。假设有这样一个题目,将某个容器中所有满足条件N == X的元素删除,按照常规的思路应该有类似这样的代码:// 假设Container和container分别表示一种容器和对应的一个对象Containe转载 2017-03-05 14:36:49 · 232 阅读 · 0 评论 -
Debug 和 Release 区别
一、Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。 Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些转载 2017-03-05 18:23:20 · 1093 阅读 · 0 评论 -
C++数组作为函数参数的几个问题
本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定?先看下面的代码。#include using namespace std; void testArrayArg(int a[]) { cout cout "in func...转载 2017-03-07 09:46:59 · 299 阅读 · 0 评论 -
进程间通信详解 - 命名管道实现
引子好,到这里呢,就需要介绍实现进程间通信的第四种方式了,也就是通过命名管道来实现,前面介绍的那三种方式呢,都是有缺陷或者说局限性太强,而这里介绍的命名管道相对来说,在这方面就做得好很多了,比如,剪贴板的话只能实现本机上进程之间的通信,而邮槽的话虽然是可以实现跨网络之间的进程的通信,但麻烦的是邮槽的服务端只能接收数据,邮槽的客户端只能发送数据,太悲剧转载 2017-04-08 10:25:11 · 828 阅读 · 0 评论 -
ReadFile
ReadFile函数从文件指针指定的位置读取数据。读操作完成后,文件指针将根据实际读出的数据自动进行调整,除非文件句柄是以OVERLAPPED属性值打开的。如果是以OVERLAPPED打开的I/O,应用程序就需要自己手动调整文件指针。 这个函数被设计成兼有同步和异步操作。ReadFileEx函数则设计成只支持异步操作,异步操作允许应用程序在读文件期间可以同时进行其他的操作。 函转载 2017-04-09 11:37:44 · 4036 阅读 · 0 评论 -
c++ 中 char 与 string 之间的相互转换问题
第一部分:将 char * 或者 char [] 转换为 string可以直接赋值,转换。 第二部分:将 string 转换为 char * 或者 char [] string 是c++标准库里面其中一个,封装了对字符串的操作 把string转换为char* 有 3种方法: 1. 调用 st转载 2017-04-09 13:20:01 · 25926 阅读 · 0 评论 -
vs2013下c++连接mysql数据库
本文使用的是MySQL提供的api来进行连接,这样使用比较方便。开发环境:mysql 5.6+vs2013+win8.1操作系统步骤1:要使用mysql的api,需要mysql安装目录下include 和 lib 两个文件夹的东西,如果你用的是wamp或者phpstudy,里面的mysql可能没这两个文件夹,那么去下个解压版的mysql就可以了,我用的是64位的mysql5.6.19安转载 2017-03-14 21:25:15 · 414 阅读 · 0 评论 -
C++ 丰富多彩的库
标准库 标准库中提供了C++程序的基本设施。虽然C++标准库随着C++标准折腾了许多年,直到标准的出台才正式定型,但是在标准库的实现上却很令人欣慰得看到多种实现,并且已被实践证明为有工业级别强度的佳作。1、 Dinkumware C++ Library 参考站点:http://www.dinkumware.comP.J. Plauger编写的高品质的标准库。P.J. Plaug转载 2017-03-26 16:51:09 · 437 阅读 · 0 评论 -
c++中vector的用法详解
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include以包含所需要的类文件vector 还有一定要加上using name转载 2017-04-17 23:05:08 · 253 阅读 · 0 评论 -
STL源码:list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表,因此迭代器必须具备前移和后移能力,所以list使用Bidirectional Iterato转载 2017-04-17 23:38:39 · 293 阅读 · 0 评论 -
c++ assert() 使用方法
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#inclu转载 2017-04-17 23:46:37 · 310 阅读 · 0 评论 -
C++构造函数初始化列表与赋值
C++类中成员变量的初始化有两种方式: 构造函数初始化列表和构造函数体内赋值。下面看看两种方式有何不同。 成员变量初始化的顺序是按照在那种定义的顺序。1 内部数据类型(char,int……指针等)class Animal{public: Animal(int weight,int height): //A初始化列表转载 2017-04-18 11:21:41 · 539 阅读 · 0 评论 -
总结const的用法
1. const的用法:(1)定义常量(2)修饰函数的参数(3)修饰函数的返回值(4)修饰函数的定义体2. 用const 修饰函数的参数(1)const 只能修饰输入参数如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地改动该指针。 例如:void StringCopy(char *strDestination, const c转载 2017-04-18 14:18:15 · 332 阅读 · 0 评论 -
static_cast、const_cast用法
static_cast 用法用法static_cast ( expression )11说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。来源:为什么需要static_cast强制转换?情况1:void指针->其他类型指针情况2:改变通常的标准转换情况3:避免出现可能多种转换的歧义它主要有如下几种用法: •用于类转载 2017-04-18 14:40:38 · 580 阅读 · 0 评论 -
什么是C++虚函数、虚函数的作用和使用方法
我们知道,在同一类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但是在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数。例如在例12.1(具体代码请查看:C++多态性的一个典型例子)程序中,在Circle类中定义了 area函数,在Circle类的派生类Cylinder中也定义了一个area函数。这两个函数不仅名字相同,而且参转载 2017-04-18 14:50:01 · 689 阅读 · 0 评论 -
strcpy_s与strcpy的比较
strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。三个参数时:errno_t strcpy_s(char *s转载 2017-04-18 20:14:36 · 2944 阅读 · 0 评论 -
什么是左值和右值
第一次让左值右值引起我注意的时候是在刚接触字符串和指针的时候编译器对代码的一段错误提示那什么是左值(l-value)那:说的通俗一点就是可以放在赋值号左边的叫左值 就是可以被赋值的。是一个地址左值一般是是一个变量可以被赋值的变量。(const变量是一个例外只能做右值)那什么是右值(r-value)那:同样我们可以说是可以放在赋值号右边的 就是可以给其他变量赋值的,它可以是一转载 2017-04-20 17:03:40 · 3070 阅读 · 2 评论