随笔分类 -  C/C++

摘要:1.C++程序内存布局 在C++中,内存分成4个区,从低地址到高地址分别是常量区、全局数据区、堆区、栈区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,就是那些由new分配 阅读全文
posted @ 2017-07-05 17:01 wxquare 阅读(507) 评论(0) 推荐(0) 编辑
摘要:一、概述 STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。 顺序性容器是一种各元素之间有顺序关系的线性表。元素在顺序容器中保存元素置入容器时的逻辑顺序,除非用删除或插入的操作改变这个位置,否则元素的位置保持为原来的位置。 关联式容器是非线性的结构,包含二叉树结构和hash结构。元 阅读全文
posted @ 2017-07-05 14:37 wxquare 阅读(646) 评论(0) 推荐(0) 编辑
摘要:一、Asio网络库 截止到C++17,C++标准库都没有加入网络通信库。实际项目网络编程是非常常见的功能,直接使用操作系统API是低效率且不稳定的,比较好的方法是借助第三方成熟可靠的网络库。据我所知C++中目前比较有名的网络库有ACE、libevent和boost.Asio,这三个库都是跨平台的,各 阅读全文
posted @ 2017-06-09 15:51 wxquare 阅读(4946) 评论(1) 推荐(0) 编辑
摘要:程序出现错误很正常,一个优秀的程序员必须学会调试,发现错误并改正。减少程序错误最有效的方法是:在敲代码之前,多花点时间思考,如何构造程序,数据结构和算法,尽量把细节提前写下来,可以尝试着在纸上写出核心代码,这样可以减少今后修改代码的时间。 1.常用的调试技巧 (1)代码检查,重新阅读程序,排除比较明 阅读全文
posted @ 2017-06-06 15:49 wxquare 阅读(994) 评论(0) 推荐(0) 编辑
摘要:由于C++支持函数重载,在编译函数代码的时候会加上参数类型的信息,而C编译只有函数名信息,导致C++直接调用C代码在链接的时候会出现函数未定义的问题。解决这种问题有两种方法。方法一:在写C代码的时候考虑到C++可能会调用这些函数,增加extern “C”;方法二:如果C++要调用的C代码没有考虑到这 阅读全文
posted @ 2017-05-18 10:21 wxquare 阅读(1707) 评论(0) 推荐(0) 编辑
摘要:目录 C++11增加了一个新的类型,称作右值引用(R-value reference),标记为T&&,右值引用结合std::move可以很好的优化程序的效率。 1.左值、右值、左值引用、右值引用 左值是有名字的,对应了一定的内存区域,可访问;右值不具名,不对应内存域,不可访问,临时对像是右值。区分表 阅读全文
posted @ 2017-05-10 22:07 wxquare 阅读(663) 评论(0) 推荐(0) 编辑
摘要:指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名,引用初始化后不能改变指向。使用时,引用更加安全,指针更加灵活。 指针和数组之间的区别 阅读全文
posted @ 2017-05-09 16:39 wxquare 阅读(437) 评论(0) 推荐(0) 编辑
摘要:C++面向对象语言一大难点是继承,但又是不得不掌握的。简单的继承是很容易理解的,但是当涉及到多继承,设计到虚函数的继承,特别是涉及到虚继承时,问题就会变得复杂。下面的内容来自参考资料中的三篇文章。C++的继承学习中,最主要是要掌握派生类的对象模型,基类和派生类指针之间的向上向下类型转换,当继承中的出 阅读全文
posted @ 2017-05-09 16:09 wxquare 阅读(501) 评论(1) 推荐(0) 编辑
摘要:目录 静态类型 vs 动态类型、静态绑定 vs 动态绑定 虚函数动态绑定实现机制、虚析构函数 多态性 静态类型 vs 动态类型、静态绑定 vs 动态绑定 虚函数动态绑定实现机制、虚析构函数 多态性 一.静态 vs 动态 静态类型 VS 动态类型。静态类型指的是对象声明的类型,在编译器确定的。动态类型 阅读全文
posted @ 2017-05-09 11:52 wxquare 阅读(3266) 评论(0) 推荐(0) 编辑
摘要:一、Linux 线程API 线程是在操作系统层面支持的,所以多线程的学习建议还是先找一本linux系统编程类的书,了解linux提供线程的API,了解使用线程设计程序的基本操纵。完全使用系统调用编写多线程程序是痛苦,现在有很多封装好的多线程库,帮助简单快速的使用线程编程,了解操作系统提供的API对理 阅读全文
posted @ 2017-05-08 23:17 wxquare 阅读(10470) 评论(0) 推荐(1) 编辑
摘要:转载自:http://blog.chinaunix.net/uid-790245-id-2037327.html 问题提出: 我们已知道类具备封装和信息隐 藏的特性。只有类的成员函数才能访问类的私有成员,程式中的其他函数是无法访问私有成员的。非成员函数能够访问类中的公有成员,但是假如将数据成员都定义 阅读全文
posted @ 2017-05-08 23:07 wxquare 阅读(718) 评论(0) 推荐(0) 编辑
摘要:目录 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 理解智能指针的原理 智能指针的使用 智能指针的设计和实现 1.智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的, 阅读全文
posted @ 2017-05-08 23:02 wxquare 编辑
摘要:目录 1.迭代器的使用 为了提高C++编程的效率,STL中提供了许多容器,包括vector、list、map、set等。有些容器例如vector可以通过脚标索引的方式访问容器里面的数据,但是大部分的容器不能使用这种方式,例如list、map、set。STL中每种容器在实现的时候设计了一个内嵌的ite 阅读全文
posted @ 2017-05-08 23:02 wxquare 阅读(17236) 评论(1) 推荐(6) 编辑
摘要:目录 定义一个通用模板 模板特化和偏特化 模板实例化与匹配 可变参数模板 定义一个通用模板 模板特化和偏特化 模板实例化与匹配 可变参数模板 泛型编程是指独立与任何类型的方式编写代码。泛型编程和面向对象编程,都依赖与某种形式的多态。面向对象编程的多态性在运行时应用于存在继承关系的类,一段代码可以可以 阅读全文
posted @ 2017-05-08 21:22 wxquare 阅读(15654) 评论(0) 推荐(3) 编辑
摘要:一、静态全局变量 理解static关键字之前首先回顾一下C/C++程序的在内存中的分配情况。从低地址到高地址依次分为:代码区、全局数据区、堆区、栈区。函数之外的全局变量和静态变量(包括全局变量和静态变量)都存储在全局数据区,堆区有程序员自己通过malloc,new申请内存,栈区存放函数内部的临时变量 阅读全文
posted @ 2017-05-06 23:31 wxquare 阅读(390) 评论(0) 推荐(0) 编辑
摘要:目录 什么是内联函数 如何使函数内联 为什么要使用内联函数 inline函数的优缺点分析 什么时候该使用内联函数 正文 在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手 阅读全文
posted @ 2017-05-03 10:14 wxquare 阅读(534) 评论(0) 推荐(0) 编辑
摘要:一、C++中流和流操作符 C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。C++输入输出除了read和write函数,还提供流操作符,可以重在,输入流操作符">>"和输出流操作符"<<"。 标 阅读全文
posted @ 2017-04-06 11:54 wxquare 阅读(5797) 评论(0) 推荐(0) 编辑
摘要:本文总结了四种字符串和数字相互转换的方法,方法一和方法二是c++中的方法,方法三和方法四是C语言库函数的方法。 方法一:c++11中string中添加了下面这些方法帮助完成字符串和数字的相互转换 stod stof stoi stol stold stoll stoul stoull 函数原型:fl 阅读全文
posted @ 2017-03-10 09:31 wxquare 编辑
摘要:一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector。array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间;(2)将原数据复制过去;(3)释放原空间三部曲。如果不是vect 阅读全文
posted @ 2017-02-20 10:44 wxquare 阅读(664) 评论(0) 推荐(0) 编辑
摘要:1.C++程序内存布局 在C++中,内存分成4个区,从低地址到高地址分别是常量区、全局数据区、堆区、栈区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,就是那些由new分配 阅读全文
posted @ 2016-01-29 14:05 wxquare 阅读(639) 评论(0) 推荐(0) 编辑