C++
我爱默小兜
热爱编程,热爱生活
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
关于浮点数转换为整数的(int )和(int &)形式
要区分转换,是包含值的转换与地址的转换。 float a=1.0f; std::cout std::cout std::cout 机子上的输出是: 1 1066192077 0 可以这样理解: (int)a 是把浮点数a的数学数值转化成int型,即保留了其整数部分 (int&)a 等价于 *((int*)&a),即是将浮点数a的内存存储结构按照int型来解释,由于浮点转载 2016-03-23 09:51:11 · 5011 阅读 · 0 评论 -
什么时候要用虚析构函数?
什么时候要用虚析构函数? 通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。 一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。 原因: 在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个操作(函数)定义为虚函数。 那么,转载 2016-04-23 17:04:28 · 961 阅读 · 0 评论 -
vs2010下配置pthread环境详解
1.下载pthread 的windows安装包 可以从官方网站上下载,网址:http://sourceware.org/pthreads-win32 下载之后解压,放置在C盘 如下图: 2.配置VS2010 打开vs2010,项目->属性->配置属性->VC++目录,包含目录里添加inlude路径;在库目录那一栏添加lib路径 添加库目录的时候,根据自己的系统选择;原创 2016-03-19 11:51:42 · 8989 阅读 · 5 评论 -
C++并行开发Pthread之线程(一)
线程对象 pthread_t 属性:竞争范围、栈大小、栈地址、分离状态、调度策略和参数 状态:可运行、运行、停止、休眠(阻塞) Pthread库可用于创建、维护和管理多线程和应用程序中的线程。 1.创建线程 int pthread_create(pthread_t * restrict thread,const pthread_attr_t *restrict attr,void原创 2016-03-19 21:19:59 · 3845 阅读 · 0 评论 -
一个简单的程序教你区分C++中strlen与sizeof
关于C++中的strlen与sizeof,很多时候,如果不注意还是会弄混的,今天特意总结一下 sizeof求占用内存的大小 strlen求的字符串的长度 #include using namespace std; int main(){ char man[12]={"hello world"}; cout<<"strlen(man)"<<strlen(man)<<endl; /原创 2016-03-27 21:44:33 · 1207 阅读 · 0 评论 -
各种排序算法汇总详解
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序转载 2016-03-26 21:04:18 · 570 阅读 · 1 评论 -
C++在继承中虚函数、纯虚函数、普通函数详解
1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。 子类可以重写父类的虚函数实现子类的特殊化。 如下就是一个父类中的虚函数: class A { public: virtual void out2(string s) { cout"A(out2转载 2016-03-25 10:25:52 · 1154 阅读 · 0 评论 -
c/c++中使用sizeof计算结构体struct和类class的长度(字节)
前言 在默认情况下,为了方便对结构体内元素的访问和管理,当结构体内的元素长度都小于处理器的位数的时候,便以结构体内最长的数据元素为对齐单位,也就是说,结构体的长度一定是最长的数据元素的整数倍。如果结构体内存在的长度大于处理器位数的,那么就以处理器的位数为对齐单位。结构体内类型相同的连续元素,将在练习的空间内,和数组一样。多说无益,直接看程序。 struct {short a1;short原创 2016-03-24 09:44:10 · 5429 阅读 · 0 评论 -
C++宏定义需要注意的细节
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但如果我们不需要到一些细节,很容易因为这个简单的宏定义引发难以预料的问题 宏的定义 (1)简单的宏定义: #define 宏名> 字符串> 例: #define PI 3.1415926 (2) 带参数的宏定义原创 2016-03-24 09:15:35 · 2285 阅读 · 0 评论 -
C++中运算符重载详解
一、运算符重载的格式 运算符重载为类的成员函数的一般格式为: 函数类型> operator 运算符>(参数表>) { 函数体> } 二.可以重载的运算符(运算符的限制) 1.可用作重载 算术运算符:+,-,*,/,%,++,--; 位操作运算符:&,|,~,^,> 逻辑运算符:!,&&,||;原创 2016-03-23 20:13:21 · 601 阅读 · 0 评论 -
fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h
错误描述:fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”? 错误分析: 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束。没有找到预编译指示信息的头文件"stdafx.h"。 (因为工程中的每个cpp文件属性默原创 2016-03-23 17:49:41 · 746 阅读 · 0 评论 -
C++中const int *、int *const 以及int const*区别
关于指针,我们首先要弄清楚四点:指针类型、指针指向类型、指针的值、指针指向的值。如果这一点不是很清楚,请参考这里 网址:http://blog.youkuaiyun.com/hsd2012/article/details/50946407 当const修饰的是指针类型,那么指针的值就不能改变,即不能指向其他地址,但是可以通过指针修改其指向地址里面的值。 当const修饰时指针指向的类型时候,那么指针被原创 2016-03-23 15:55:50 · 11405 阅读 · 0 评论 -
C++的|、||、&、&&、异或、~、!运算
位运算 位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果。 位运算符有: &(按位与)、|(按位或)、^(按位异或)、~ (按位取反)。 其中,按位取反运算符是单目运算符,其余均为双目运算符。 位运算符的优先级从高到低,依次为~、&、^、|, 其中转载 2016-03-23 10:42:09 · 2468 阅读 · 0 评论 -
C++中宏和函数的区别
宏和函数写法以及调用方式,有很大的相似,但是他们却存在本质上的区别,函数调用时将实参表达式值求出来,然后赋值给形参,计算结果,而宏则是对实参表达式不做计算,直接替换。 eg: int fun(int y){ return y*y; } #define FUN(y) y*y; int tmp=3; int a=fun(++tmp); //16 tmp=3; int b=FU原创 2016-01-11 20:45:55 · 1547 阅读 · 0 评论 -
C++中sizeof详解
void main() { int a[2][2]={1,2,3,4};//这是一个2*2的二维数组 int (*p)[2];//数组指针 p=a;//令p指向数组a printf("%d\n%d\n",sizeof a,sizeof p); } 猜一猜输出是什么? 困惑了吗?为什么结果会是这样转载 2016-03-22 15:13:20 · 1284 阅读 · 0 评论 -
#include<string>与#include<string.h>的区别
为什么下面这段代码 #include void main() { string aaa= "abcsd d"; printf("looking for abc from abcdecd %s\n", (strcmp(aaa,"abc")) ? "Found" : "Not Found"); } 不能正确执行,说是strin转载 2016-03-22 11:39:03 · 755 阅读 · 0 评论 -
C++/C中指针详解
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: int *ptr; char *ptr; int **ptr; int (*ptr)[3];转载 2016-03-21 14:43:55 · 1293 阅读 · 0 评论 -
C++中static_cast, dynamic_cast, const_cast探讨
首先回顾一下C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 int ival = 3; double dval = 3.14159;转载 2016-03-19 16:09:06 · 664 阅读 · 0 评论 -
C++中restrict修饰符作用
今天查看POSIX的API时候,发现里面有一行 int pthread_create(pthread_t * restrict thread,const pthread_attr_t *restrictattr,void *(*start_routine)(void*),void*restrict arg); 开始和不解为什么变量前面要加上restrict修饰符呢?restrict是 限制原创 2016-03-19 15:45:51 · 9721 阅读 · 0 评论 -
关于VC中 error C2871: 'std' : does not exist or is not a namespace
#include using namespace std; 然后编译时出现 error C2871: 'std' : does not exist or is not a namespace 查了一下,原来 C++有两个不同版本的头文件。引入名字空间这个概念以前编译器用的是#include , 而引入名字空间的概念以后std名字空间的头文件名字变成了。 是比较老的C++的头文件原创 2016-03-19 10:19:13 · 14062 阅读 · 0 评论 -
C++二分法
/** *param arr 有序数组 *param n 数据长度 *param key 查找关键字 */ int search(int arr[],int n ,int key){ int maxkey=n-1,minkey=0,midkey; while(maxkey>=minkey){ midkey=(maxkey+minkey)/2; cout if(arr原创 2016-02-18 20:31:37 · 907 阅读 · 0 评论 -
C++运算符优先级列表
Precedence Operator Description Example Associativity 1 () [] -> . :: ++ -- Grouping operator Array access Member access from a pointer Member access from an object原创 2016-02-16 20:36:57 · 1118 阅读 · 0 评论 -
计算X转为二进制后,包含1的数量
#include int func(int x){ int count=0; while(x){ count ++; x=x&(x-1); } return count; } void main(){ cout }原创 2016-02-16 16:07:14 · 848 阅读 · 0 评论 -
C++中预处理(文件包含include)
C++中,文件包含有两种方式,一种是 第一种方式 #include 第二种方式 #include “iostream” 第一种方式,使用 合理使用包含文件 一般说来,常量、全局变量,函数声明包含在头文件(.h)中,其定义放在.cpp文件中,使用时候,包含对应的头目录即可。原创 2016-01-11 21:16:43 · 1183 阅读 · 0 评论 -
C++中预处理(宏详解)
宏是指使用一个标识符来表示一个常量、表达式或是格式串。在编译预处理阶段,程序中所有出现的宏名会被替换。 作用: 1.提高程序的通用性与易读性 2.便于修改 C++中有定义宏 不带参数宏定义 格式 #define 标识符名 字符串 #表示这是一条预处理命令。 标识符名 即宏名,宏名一般都是用大写字母。 字符串可以为常数、表达式、格式串 eg: #define IP 192.16原创 2016-01-11 20:27:39 · 1190 阅读 · 0 评论 -
C++中预处理(条件编译)
c++预处理包含1.宏定义2.文件包含3.条件编译4.#error命令5#line命令。现在该说说条件编译了。C++中条件编译有三种形式 1.#ifdef形式#ifdef 标识符 {程序段1} #else {程序2} #endif如果标识符被定义了,则执行程序段1,否则执行程序段2 其形式也可如下#ifdef 标识符 {程序段1} #endif2.#ifndef形式#if原创 2016-01-11 21:44:15 · 590 阅读 · 0 评论
分享