C++
lee_鹿游原
Talk is cheap. Show me the code
展开
-
Cout输出字符地址问题
Cout输出字符型地址时,需要注意 例:struct { int a; char b; }A; int main(){std::cout//正确std::cout ( & A.b )}//原因:输出字符型变量的地址 被认为是char * char *被co原创 2012-01-07 13:33:43 · 1385 阅读 · 0 评论 -
C++静态库与动态库
C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非转载 2014-12-22 14:42:23 · 760 阅读 · 1 评论 -
GCC 命令行详解 -L 指定库的路径 -l 指定需连接的库名
为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。-l参数和-L参数-l参数就是用来指定程转载 2014-12-22 14:47:56 · 1175 阅读 · 0 评论 -
微软strcpy,strcat和strcmp的实现源代码 itoa atoi
/****char *strcpy(dst, src) - copy one string over another**Purpose:* Copies the string src into the spot specified by* dest; assumes enough room.**Entry:* char * dst -转载 2015-01-16 11:55:41 · 807 阅读 · 0 评论 -
C++中unordered_map的版本兼容性问题
背景在C++中最让我蛋疼的事情之一就是unordered_map千呼万唤才出来,在C++早期版本标准库里面只有map这个字典。 但是map的内部实现是采用的红黑树,众所周知,对于字典这类结构也可以用hash表来实现,也就是C++的标准库应该也要有hash_map这种数据结构。红黑树实现的map占用内存较小,但是查找效率不高,O(logn)的查找效率。hash表实现的map占用内转载 2015-01-22 11:31:12 · 6740 阅读 · 0 评论 -
C++11新特性:Lambda函数(匿名函数)
声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了。匿名函数在很多时候可以为编码提供便利,这在下文会提到。很多语言中的匿名函数,如C++,都是用Lambda表达式实现的。Lambda表达转载 2015-01-23 10:29:06 · 886 阅读 · 0 评论 -
运算符重载详解
1.运算符重载定义:C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运转载 2015-02-28 18:30:05 · 848 阅读 · 0 评论 -
C/C++堆和栈的区别
堆和栈的区别1. 管理方式不同栈,由编译器自动管理,无需程序员手工控制;堆:产生和释放由程序员控制。2. 空间大小不同栈的空间有限;堆内存可以达到4G,。3. 能否产生碎片不同栈不会产生碎片,因为栈是种先进后出的队列。堆则容易产生碎片,多次的new/delete会造成内存的不连续,从而造成大量的碎片。4. 生长方向不同转载 2015-03-03 10:51:20 · 792 阅读 · 0 评论 -
字符串反转 / 按位异或交换值解析
//// main.cpp// Test//// Created by Lee on 15-3-10.// Copyright (c) 2015年 Lee. All rights reserved.//#include char* reversal(char* src){ char *start = src; char *end = star原创 2015-03-10 10:17:05 · 3968 阅读 · 0 评论 -
RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
1. 编译时开销模板、类层次结构、强类型检查等新特性,以及大量使用了这些新特性的 STL 标准库都增加了编译器负担。但是应当看到,这些新机能在不降低,甚至(由于模板的内联能力)提升了程序执行效率的前提下,明显减轻了广大 C++ 程序员的工作量。 用几秒钟的CPU时间换取几人日的辛勤劳动,附带节省了日后调试和维护代码的时间,这点开销当算超值, 当然,在使用这些特性的时候,也有不少优化技巧。比如:编转载 2015-05-12 11:42:44 · 652 阅读 · 0 评论 -
面试中的Singleton
引子“请写一个Singleton。”面试官微笑着和我说。“这可真简单。”我心里想着,并在白板上写下了下面的Singleton实现:“那请你讲解一下该实现的各组成。”面试官的脸上仍然带着微笑。“首先要说的就是Singleton的构造函数。由于Singleton限制其类型实例有且只能有一个,因此我们应通过将构造函数设置为非公有来保证其不会被用户代码随意创建。而在类型转载 2016-02-26 18:07:53 · 460 阅读 · 0 评论 -
Unity导出Window Store App的各种坑(2)
unity 与 win store 相互调用的 demo。unity 5.5+Visual studio 2015 +Demo URL原创 2017-08-01 12:35:03 · 1667 阅读 · 2 评论 -
linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定
C/C++程序在linux下被编译和连接时,GCC/G++会查找系统默认的include和link的路径,以及自己在编译命令中指定的路径。自己指定的路径就不说了,这里说明一下系统自动搜索的路径。【1】include头文件路径 除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统inclu转载 2014-12-22 14:50:18 · 1047 阅读 · 0 评论 -
内联函数和宏定义的区别
用内联取代宏:1.内联函数在运行时可调试,而宏定义不可以;2.编译器会对内联函数的参数类型做安全检查或自动类型转换(同普通函数),而宏定义则不会; 3.内联函数可以访问类的成员变量,宏定义则不能; 4.在类中声明同时定义的成员函数,自动转化为内联函数。文章(一)内联函数与宏定义 在C中,常用预处理语句#define来代替一个函数定义。例如: #d转载 2014-11-01 10:17:14 · 743 阅读 · 0 评论 -
vector部分实现
#ifndef _MY_VECTOR_H #define _MY_VECTOR_H #include #include templateclass T> class MyVector { public: class iterator { public: iterator()转载 2012-01-06 16:49:25 · 583 阅读 · 0 评论 -
常量折叠
常量折叠也可以称作常量合并。首先来看一个例子:int main(int argc, char* argv[]){const int i=0;int *j = (int *) &i;*j=1;coutcoutcoutreturn 0;}结果是0012ff7c0012ff7c01因为i和j都指向相同的内原创 2012-01-09 11:40:30 · 1487 阅读 · 0 评论 -
“只用赋值、加1、循环三个操作实现一个减1的运算。
template T MOne(T a){ T i = 0; for (i; (i + 1) != a; i++) { } return i;}原创 2012-01-07 11:23:46 · 970 阅读 · 0 评论 -
UML类图的6种关系
继承:空心三角形箭头的实线,子类指向父类。代码中通常有extends关键字(Java)。实现:空心三角形箭头的虚线,实现类指向接口。代码中通常有implements关键字(Java)。关联:通常是类A中需要引用另一个类B的实例作为成员变量,表示类A需要“知道”类B。实线箭头,类A指向类B。依赖:通常是类A中的方法需要类B的实例作为其参数,转载 2012-01-31 10:15:14 · 1119 阅读 · 0 评论 -
C++构造函数中调用构造函数
#include #include using namespace std;struct CLS{ int m_i; CLS( int i ) : m_i(i){} CLS() { CLS(0); }};int main(){ CLS obj; cout syst转载 2012-12-17 14:50:06 · 1305 阅读 · 1 评论 -
使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法
使用printf修改变量的值 —— VS2008中使用%n输出遇到的问题及解决方法分类: C/C++ VC/MFC2011-03-10 23:03 595人阅读 评论(0) 收藏 举报2011-03-10 wcdj 在printf的使用说明 中讲到有关 %n 的用法:n Nothing printed. The argument mus转载 2013-01-21 22:21:44 · 1595 阅读 · 0 评论 -
C++ 大根堆排序
/////////////////////////////////////////////////////// 大根堆 /////////////////////////////////////////////////////////////void heap_adjust(int *a,int node,const int isize){ int leftnode = 2*node原创 2014-09-18 17:15:39 · 1605 阅读 · 0 评论 -
C++内存管理
C++内存管理[导语]内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者.NET,他们的内存管理基本是自动的,当然你也放弃转载 2014-08-29 15:59:52 · 694 阅读 · 0 评论 -
大端格式、小端格式
大端格式、小端格式大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中,如图2.1所示: 图2.1小端格式:与大端存储格式相反,在小端存储格式中,低地址中存放的是字数据的低字节,高地址存放的是字数据的高字节。如图2.2所示: 图2.2 请写一个C 函数,若处理器是Big_endian的,则返回0;若是Little转载 2014-08-29 15:39:38 · 2388 阅读 · 1 评论 -
快速排序 qsort
void quicksort(int *arr,int ileft,int iright){ if(ileft<iright) { int ipivot = arr[ileft]; int i = ileft; int j = iright; while(i<j) { while(iipivot) { j--; } arr[i] = arr原创 2014-10-27 14:38:48 · 676 阅读 · 0 评论 -
C++中为什么使用bool类型
1.1. 为什么要用bool类型、因为我曾经看到过C++程序员,使用着C++的编译器,却仍然在使用BOOL、TRUE、FALSE等宏来表达现实世界中的二值事物,令我很不解,前去询问才知是“习惯”。显然,它以前是使用C语言编程的,而且使用这些宏做了很多事,也从来没有感觉到不好,为什么要用内置的bool类型呢,至少有两个优点,下面分别讨论。1.1.1. 提高程序的可读性Boolean(转载 2014-10-11 11:04:05 · 17353 阅读 · 0 评论 -
Unity 接微软支付(C++/CX)
1.介绍项目是Unity通过IL2CPP & XAML导出的C++/CX的项目,如果是C#导出可以不用看这个,直接去看官网文档,查看例子即可。 2.相关代码(旧版本)注意:SendMessageToU3D这个API,是向Unity发送消息。插件地址微软文档:https://docs.microsoft.com/zh-cn/windows/uwp/monetize/ena...原创 2017-08-01 12:11:33 · 1265 阅读 · 0 评论