
c++
李正浩大魔王
广州 佛山
展开
-
[C++]cppreference离线手册
cppreference离线手册下载介绍cppreference是C++各种标准库函数API的查询手册。内容如下图:所有函数,如果不记得随时可以查询翻阅,还带详细demo。离线文档下载地址下载地址:https://zh.cppreference.com/w/Cppreference:Archives以下两个选项 chm版本或者html版本的离线文档都可以下载:98683013722)]...原创 2020-08-29 14:38:07 · 12387 阅读 · 3 评论 -
c++判断系统为windows或linux
C++判断系统为linux或windows// #if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__) // do something...// #else // do something...// #endif原创 2020-03-26 13:42:48 · 3607 阅读 · 2 评论 -
cmake生成同名的可执行文件和库文件
CMake生成同名的可执行文件和库文件 # 生成动态库文件 add_library(项目名_exe SHARED foo_lib.c) set_target_properties(项目名_exe_lib PROPERTIES OUTPUT_NAME 项目名) # 生成可执行文件 add_executable(项目名_exe foo_exe.c) set_t...原创 2020-03-25 15:46:30 · 2262 阅读 · 0 评论 -
ubuntu下编译并使用jsoncpp
ubuntu编译并使用jsoncpp安装好gcc和g++删除所有旧引用(如果未安装过gcc,跳过此步骤) sudo update-alternatives --remove-all gcc sudo update-alternatives --remove-all g++安装gcc和g++ sudo apt-get install gcc-4.8 sud...原创 2020-03-25 14:46:59 · 2132 阅读 · 0 评论 -
[cocos2d-x]捕鱼达人炮台射击角度的旋转实现
话不多说,先上图,下面是实现代码(在后面会具体讲解实现过程): //第一步:将炮台的坐标转换为世界坐标下的坐标点 CCPoint location = this->getParent()->convertToWorldSpace(this->getPosition()); //第二部:计算出两个向量之间的夹角 float angle = ccpAngleSigned(ccpSub(tar原创 2017-08-15 21:50:53 · 4208 阅读 · 2 评论 -
[cocos2d-x]飞机大战 遇到的bug和总结(二)
第一点声音文件最好不要使用mp3格式,因为我在同时使用背景音乐和playeffect()的时候,出现了bug,两者的音效不能同时出现(应该是格式问题),并且声音在windows上运行的时候加载非常慢(当然也可以通过提前加载实现)。另外推荐一个免费的在线音频视频文件转换网站,我觉得非常好用: 网站地址点这里!第二点想要实现游戏的暂停和恢复,只需要使用下列两行代码就行:Director::getIns原创 2017-08-04 22:35:53 · 605 阅读 · 0 评论 -
[cocos2d-x]用getContentSize()返回的值用CCLOG打印必须用%f
今天写代码,又遇到了一个bug,开始还以为是我自己哪写错了,没想到竟然在这里出错? 而width和height的类型是float类型,为什么必须用%d打印?接着我查看了一下源码: 如果没理解错的话,CCLOG用的应该是printf打印,那么接下来就很好懂了,我又去做了一个测试:%d输出float类型有一些基础必须要知道: 1、float类型是采用IEEE754标准,1位数符,8原创 2017-08-19 11:10:25 · 829 阅读 · 0 评论 -
[数据结构与算法]快速排序的优化实现(取中位数)
#include "iostream"using namespace std;int Partion(int array[], int low, int high);void findMid(int array[], int low, int high);void QuickSort(int array[], int low, int high)//主函数{ if (low<hig原创 2017-08-10 10:54:06 · 1057 阅读 · 0 评论 -
[C++标准模板库:自修教程与参考手册]关于auto_ptr
什么是auto_ptr指针auto_ptr是这样一种指针:它是“它所指的对象”的拥有者,所以,当身为对象拥有者的auto_ptr指针被摧毁时,该对象也会被摧毁,auto_ptr要求一个对象只能拥有一个拥有者,严禁一物二主。 注意:auto指针不能用一般指针惯用的赋值初始化方式,必须直接使用数值来完成初始化。std::auto_ptr<ClassA> ptr1(new ClassA);//这原创 2017-07-19 22:52:41 · 738 阅读 · 0 评论 -
[深度探索C++对象模型]trival constructor和non-trival constructor
分清楚user-declared constructor和implict default constructor首先要知道,如果你没有自定义一个类的构造函数,那么编译器会在暗中声明一个构造器,这个构造器是为了编译器所需要而创造,我们称它为implict default constructor它们实际上并不会真正的产生!!,而不是因为程序需要这个构造器而产生,如果是因为程序需要这个构造器,那么这是程原创 2017-07-22 22:07:33 · 953 阅读 · 0 评论 -
[C++标准模板库:自修教程与参考手册]关于deque
Deque的基本概念deque和vector很相似,也提供随机存取的能力,将元素都动态地存储在一个数组中,最大的区别就是:deque的头和尾都是开放的,非常方便在头尾两端进行一些操作。(重点在于:deque所占用的内存区域不是连续的一块区域,可能是多块内存区域,就像数据结构中的邻接表一样,表中每一个指针指向一块内存区域的起始地址,它采用一个map(不是STL中的map)作为主要控制,每个元素都是一个原创 2017-07-21 22:18:36 · 619 阅读 · 0 评论 -
[C++标准模板库:自修教程与参考手册]关于vector
什么是vector可以这样认为,vector就是一个动态的数组,其中的元素必须具备assignable(可赋值)和copyable(可拷贝)两个性质。 vector的一些重要的性质vector支持随机存取,存取时间为O(1)。vector的迭代器是随机存取迭代器,所以所有的STL算法都可以使用。在末尾添加元素时,vector的性能非常好(只要总的元素个数没超过capacity就行)。但是如果原创 2017-07-20 21:55:06 · 495 阅读 · 0 评论 -
[cocos2d-x]关于Action
Action的分类 第一种:FiniteTimeAction类:有限时间的动作类 第二种:Follow类:节点跟随另一种节点的类 第三种:Speed类:节点执行速度类第一种有限时间的动作类又分为瞬时动作和持续时间的动作。几个重要的动作类Sequence:按顺序执行一系列的动作。但是在执行的动作系列中不能出现Repeat这种无限的动作。CCMoveTo* move_1 = CCMoveTo:原创 2017-07-10 22:12:54 · 415 阅读 · 0 评论 -
[深度探索C++对象模型]memcpy和memset注意事项
不管使用memcpy()还是memset(),都只有在“classes不含任何由编译器产生的内部members”时才能运行。如果这个类声明一个或者一个以上的virtual function,或者内含一个virtual base class,那么使用这两个函数将会导致那些“被编译器产生的内部members”的初值所改写。例如下面的声明:class Shape{public: //这会改变内部原创 2017-09-04 22:12:00 · 623 阅读 · 0 评论 -
[深度探索C++对象模型]关于成员初始化列表(member initiallization list)
四种特殊情况:1、当初始化一个reference member时。 2、当初始化一个const member时。 3、当初始化一个base class的constructor,而它拥有一组参数时。 4、当初始化一个member class的constructor,而它拥有一组参数时。除了上面四种情况,其他情况下的选择其实都差不多。而这四种情况如果不使用成员初始化列表,程序能够被正确编译并且执行原创 2017-09-04 22:21:37 · 581 阅读 · 0 评论 -
Resharper c++ 使用Enter自动补全代码步骤
步骤菜单栏扩展resharperoptionIntelliSenseAutopopup将所有的菜单都选择Display and preselect,也就是预先选择,之后就可以用enter而不是用tab进行补全了。原创 2019-07-11 16:01:54 · 3261 阅读 · 4 评论 -
[C++ Primer] 第二章 变量和基本类型
第二章 变量和基本类型引用引用定义的时候必须初始化。引用初始化之后无法重新绑定到其它对象上。引用本身并不是对象,所以没有指向引用的引用(不管如何多层引用,引用的还是源对象)下面用一个简单的例子说明:int a=1;int& b=a;cout<<&a;//00D4FE0Ccout<<&b;//00D4FE0C可以看...原创 2019-06-19 15:11:24 · 176 阅读 · 0 评论 -
[C++]std::sort()函数使用总结
函数声明 template< class RandomIt, class Compare >constexpr void sort( RandomIt first, RandomIt last, Compare comp );以一定排序规则排序指定范围内的元素,但是算法不具有稳定性,如果元素的值是相同的话不保证它们的相对顺序保持不变。 参数说明fir...原创 2019-01-23 22:02:06 · 13845 阅读 · 0 评论 -
C++string与int的相互转换(使用C++11)
一、int转string#include <iostream>#include <string> int main() { double f = 23.43; double f2 = 1e-9; double f3 = 1e40; double f4 = 1e-40; double f5 = 123456789; ...原创 2018-09-16 08:08:26 · 140287 阅读 · 7 评论 -
《STL源码剖析》STL迭代器分类
input迭代器:只能向前移动,一次一步,用户只能读取,不能修改它们所指向的东西,而且只能读取一次。output迭代器情况类似,但一切只为输出:它们只能向前移动,一次一步,用户只可以修改它们所指向的东西,而且只能涂写一次。forward迭代器:可做前两种迭代器所做的每一件事情,而且可执行多次读或者写多次。Bidrectional迭代器:除了可以向前移动,还可以向后移动,STL的list迭代...原创 2017-04-11 15:01:09 · 459 阅读 · 0 评论 -
[cocos2d-x]判断两个矩形是否有交叉区域
bool Rect::intersectsRect(const Rect& rect) const{ return !( getMaxX() < rect.getMinX() || rect.getMaxX() < getMinX() || getMaxY() < rect.getM...原创 2017-08-23 21:39:37 · 2808 阅读 · 0 评论 -
[C++]全面理解C++中的引用
1、C++内存分配方式 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(stat转载 2017-10-29 23:16:29 · 348 阅读 · 0 评论 -
[C++]C++11右值引用
右值引用的概念(摘自C++Primer)左值和右值的概念 1、左值和右值是表达式的属性,一些表达式要求生成左值,一些表达式要求生成右值;左值表达式通常是一个对象的身份,而一个右值表达式表示的是对象的值。 2、左值持久,右值短暂,右值只能绑定到临时对象,所引用的对象即将销毁并且该对象没有其他用户,由此可知,使用右值引用的代码可以自由地接管所引用的对象的资源。先看看移动语义右值引用是C++11中最重原创 2017-09-16 07:33:19 · 449 阅读 · 0 评论 -
[C++]C++11:Function与Bind
在C++11中,callable object 包括传统C函数,C++成员函数,函数对象(实现了()运算符的类的实例),lambda表达式(特殊函数对象)共4种。程序设计,特别是程序库设计时,经常需要涉及到回调,如果针对每种不同的callable object单独进行声明类型,代码将会非常散乱,也不灵活。如下示例:#include <iostream>#include <functional>u转载 2017-07-07 23:20:25 · 263 阅读 · 0 评论 -
深入理解C++虚函数底层机制和RTTI运行时类型识别
当调用一个虚函数时,被执行的代码必须与调用函数对象的动态类型相一致:指向对象的指针或引用的类型是不重要的,编译器是如何高效地提供这种行为呢?大多数编译器是使用virtual table和virtual table pointers(vtbl和vptr)。 一个vtbl通常是一个函数指针数组,在程序中每个类只要声明了虚函数,它就有自己的vtbl,并且类中的vtbl的内容是指向所有该类虚函数原创 2017-04-12 15:51:18 · 2636 阅读 · 2 评论 -
[C++]default constructor默认构造函数
例子:class A{public: int a; char b;}A temp;cout<<temp.a<<endl;问题1:什么时候会合成出一个default constructor(默认构造函数)? 答案:当编译器需要它的时候问题2:如果没有自定义构造函数而直接使用数据成员会有怎样的后果? Global objects的内存保证会在程序激活的时候被置为0,Local原创 2017-04-02 20:27:41 · 1453 阅读 · 0 评论 -
[C++]模版特例化和模版偏特化
函数模版特例化例子://第一个版本;可以比较任意两个类型template<typename T> int compare(const &T,const T&);//第二个版本处理字符串字面常量;重载实现template<size_t N,size_t M>int compare(const char(&)[N],const char (&)[M]);//第三个版本;模版特例化templa原创 2017-03-21 22:35:29 · 2977 阅读 · 0 评论 -
《Effective C++》资源管理章节
Item 13:以对象管理资源 关键的两个想法(这种方式其实在很多地方都可以看出影子,比如managing pool的模型): 1.获得资源后立刻放入管理对象(managing object):以对象管理资源的观念常常被称为“资源取得之时就是初始化时机”(Resourece Acquisition Is Initialization;RAII),因为我们总是在获得资源后,在同一语原创 2017-03-11 23:02:16 · 377 阅读 · 0 评论 -
《Effective C++》构造、析构、赋值运算
Item 05:了解C++默默编写并调用了哪些函数 总结:编译器可以暗自为class创建default 构造函数、copy构造函数、copy assignment操作符,以及析构函数。 (这一小节比较简单,想要深入了解可以翻阅深入探索C++对象模型的笔记)Item 06:若不想明确使用编译器自动声称的函数,就该明确拒绝 方法1:将该成员函数声明为private原创 2017-03-11 21:02:05 · 351 阅读 · 0 评论 -
《Effective C++》关于const,define等总结
(将每一条item的总结和自己的理解给记录下来,以后有需要的话可以再回头参阅这些资料,不懂的再翻书温故。) Item 02:尽量以const ,enum,inline替换#define#define compare(x,y) func((x)>(y)?(x):(y));//下面调用它int a=5,b=0;ccompare(++a,b);//a被累加两次compare(++a,b+1原创 2017-03-11 20:04:15 · 469 阅读 · 0 评论 -
《STL源码剖析》traits技法分析
在完成一个迭代器的时候,我们可能会暴露太多的细节在外面,为了将这些细节给隐藏,我们需要封装,这也是为什么每一种STL容器都提供了一种专属的迭代器。 为了解决以“迭代器所指对象的型别”为型别 解决办法是:利用template的参数推导(argument deducation)template<class I,class T>void func_impl(T iter,T t){原创 2017-03-11 18:53:22 · 516 阅读 · 0 评论 -
《深度探索C++对象模型》第六章 执行期语意学
new运算符和delete运算符 运算符new看似是一个简单的运算,比如:int *pi=new int(5);但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内存://调用函数库中的new运算符int *pi=__new(sizeof(int));2.给配置得到的对象分配初值:*pi=5;(注意,上面的代码中并不包括 exception handling,是原创 2017-03-11 12:28:43 · 447 阅读 · 0 评论 -
《深度探索C++对象模型》第四章 Function语意学
member function相对于nonmember function之间不存在效率之间的差别,因为编译器内部已经将“member 函数实体”转化为对等的“nonmember 函数实体”,转化过程: 1.改写函数的函数原型,以安插一个额外的参数到member function中,用于提供一个存储管道,使class object得以调用该函数,该额外参数被称为this指针。 2.原创 2017-03-11 00:07:14 · 491 阅读 · 0 评论 -
《深度探索C++对象模型》第三章 Data语意学
首先给出以下例子: class X{};class Y:public virtual X{};class Z:public virtual X{};class A:public Y,public Z{};sizeof(X);//1sizeof(Y);//8sizeof(Z);//8sizeof(A);//12Y,Z的内存大小受三个因素的影响: 1.语言本身造成的额外负担,指原创 2017-03-10 23:30:02 · 371 阅读 · 0 评论 -
《深度探索C++对象模型》第二章 构造函数语意学
Default Constructor的构建操作 default constructors在需要的时候被编译器产生。 例:clas Foo{public: int val; Foo*next;}void foo_bar(){ Foo bar; if(bar.val||bar.next)//如果两个数据有一个存在的话 { //doing somet原创 2017-03-10 23:11:40 · 524 阅读 · 0 评论 -
[C++]我的理解之内存对齐
问题1:为什么要内存对齐?平台原因:不是所有的平台都能访问到任意地址上的任何数据,如果在特定的地址上找不到数据的话就会抛出硬件异常。性能问题:简单的来说如果没有使用内存对齐的话,相对于内存对齐,CPU要更多次去访问内存才能将数据正确的读出,所以会出现性能上的降低。(甚至有些CPU没有采取内存对齐的话就会罢工)问题2:内存对齐有什么规则/规律?第一条规则:第一个数据成员一定要放在偏移量(offC++内存对齐原创 2017-03-12 22:39:23 · 466 阅读 · 0 评论 -
《Effective C++》设计与声明章节
Item18:让接口容易被正确使用,不易被误用 总结: 1.好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达到这些性质。 2.“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。 3.“阻止误用”的办法包括建立起新类型、限制类型上的操作,束缚对象的值,以及消除客户的资源管理责任。 4.trl::shared_ptr支持定制型删除器(custon destr原创 2017-03-12 23:43:37 · 360 阅读 · 0 评论 -
[C++]bitwise和memberwise的区别
在看《深入探索C++对象模型》这本书的时候,我看见了bitwise senimatics和memberwise senimatics,看的时候还不清楚这两个是什么意思,书本上直接使用的是英文,所以我的直译就是位逐次语意和成员逐次语意,经过一番百度后才发现原来就是简单的浅拷贝和深拷贝的区别,既然自己已经百度了,不妨就顺便把这两者给做个简单的分析吧。进入正题: 在探索C++模型书上提到的,如果原创 2017-03-11 19:33:34 · 4576 阅读 · 0 评论 -
[C++]union联合体总结
特点一:成员公用内存,且按所占内存最大的数据成员分配内存//举例1union A{ char a;//1个字节 int b;//4个字节 char c;//1个字节}cout<<sizeof(A)<<endl;//输出的结果是4个字节特点二:数据成员的访问权限为公有//举例2union B{ char a; int b; char c;}B原创 2017-04-02 19:42:07 · 688 阅读 · 1 评论 -
《STL源码剖析》Sort排序分析
整体而言: sort算法在数据量大时采用Quick Sort(快速排序),一旦分段后的数据量小于某个门槛,为避免Quick Sort的递归调用带来过大的额外负担,就改用Insertion Sort(插入排序),如果递归层次过深,还会改用Heap Sort(堆排序),先分别简单介绍Quick SortInsertion Sort插入排序Insertion sort以双层循环的形式进行,外循环便利整个序原创 2017-04-02 19:30:58 · 1733 阅读 · 0 评论