C/C++
HySmiley
程序猿的视界
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
typedef与#define
一、typedef作用简介* 我们可以使用typedef关键字为各种数据类型定义一个新名字(别名)。 1 #include 2 3 typedef int Integer; 4 typedef unsigned int UInterger; 5 6 typedef float Float; 7 8 int main(int argc, const char转载 2017-04-18 19:04:46 · 285 阅读 · 1 评论 -
坦克大战(一)
网站:点击打开链接是助 C++语言初学者上手图形编程的网站。在VS2013中没有图形库:从点击打开链接下载对应编辑器的EasyX库,EasyX 是针对 C++ 的图形库,可以帮助 C++语言初学者快速上手图形和游戏编程。安装EasyX :点击打开链接。从网站:点击打开链接可以学坦克大战的游戏设计。我主要加深对C++面向对象编程的理解。面向对象的三大特性:封装、继承、多态原创 2017-11-10 18:21:08 · 2236 阅读 · 0 评论 -
STL(三)vector复杂对象的创建及遍历
由上一节中了解vector基本使用,但是往往编程中使用vector复杂类型创建对象,因为泛型编程中类型的自由。这样使得对象变得更为复杂。1、二维数组定义:vector> obj;#include#include#include#includeusing namespace std;//二维数组遍历//迭代器void reverse_with_itera原创 2017-11-29 22:01:46 · 1183 阅读 · 0 评论 -
STL(四) deque 双端队列
deque底层数据结构vector是单向开口的线性连续空间,deque则是一种双向开口的连续数据空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。当然vector也可以在头尾两端进行操作,但是其头部操作效果奇差,所以标准库没有为vector提供push_front或pop_front操作。与vector类似,deque支持元素的快速随机访问。deque的示意图如原创 2017-11-30 17:05:52 · 1387 阅读 · 0 评论 -
STL(二)vector 动态数组
vector的底层数据结构是动态数组,因此,vector的数据安排以及操作方式与std::array十很相似,它们间的唯一差别在于对空间的运用灵活性上。array为静态数组,有着静态数组最大的缺点:每次只能分配一定大小的存储空间,当有新元素插入时,要经历“找到更大的内存空间”->“把数据复制到新空间” ->“销毁旧空间” 三部曲, 对于std::array而言,这种空间管理的任务压在使用它的用原创 2017-11-28 22:51:35 · 542 阅读 · 0 评论 -
STL(一)array静态数组
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。C++ 标准模板库的核心包括以下三个组件:组件描述容器(Containers)容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、原创 2017-11-27 23:18:26 · 1097 阅读 · 0 评论 -
STL(六)forward_list 单向链表
参考:http://blog.youkuaiyun.com/devourheavens/article/details/7497172http://zh.cppreference.com/w/cpp/container/forward_listforward_listtemplate > class forward_list;Forward list原创 2017-11-30 23:02:22 · 3051 阅读 · 1 评论 -
C++高级编程(一)文件和流
C++高级编程内容:文件和流、异常处理、动态内存、命名空间、模板、预处理器、信号处理、多线程、Web编程等。C++标准库:点击打开链接std:: 是个名称空间标示符,C++标准库中的函数或者对象都是在命名空间std中定义的,所以我们要使用标准函数库中的函数或对象都要使用std来限定。 对象cout是标准函数库所提供的对象,而标准库在名字空间中被指定为s原创 2017-11-22 22:46:49 · 430 阅读 · 0 评论 -
STL(五)list 双向链表
list底层数据结构list同样是一个模板类,它底层数据结构为双向循环链表。因此,它支持任意位置常数时间的插入/删除操作,不支持快速随机访问。迭代器类型list的迭代器具备前移、后移的能力,所以list提供的是Bidirectional iterator(双向迭代器)。由于采用的是双向迭代器,自然也很方便在指定元素之前插入新节点,所以list很正常地提供了inser原创 2017-11-30 21:21:07 · 663 阅读 · 0 评论 -
C++高级编程(二)异常
C++中有标准异常库,其中exception是基类,标准库所生成的所有异常继承自std::exception。class exception {public: exception () noexcept; exception (const exception&) noexcept; exception& operator= (const exception&) noexcept;原创 2017-11-23 21:52:14 · 946 阅读 · 0 评论 -
C++高级编程(三)动态内存
栈:在函数内部声明的所有变量都将占用栈内存。堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。调试时静态变量与全局变量直接跳过,只有运行到指针变量所在行时才分配地址。函数在栈中占用一个连续的区域,一个函数占用的区域被称作帧(frame)。同时栈是线程独立的,每个线程都有自己的栈。new 与 malloc() 函数相比,其主要原创 2017-11-24 16:59:29 · 396 阅读 · 0 评论 -
C++高级编程(四)命名空间
命名空间:简单来说就是将函数、对象、类打包在一个固定的空间(固定域),用来区分同名函数、对象或类,使用时只需在函数、对象或类前加上作用域来确定是使用哪个域(空间)。C++标准库使用的命名空间是std。命名空间定义namespace name{//自定义的标识符} 直接使用: 命名空间名::[命名空间名::…原创 2017-11-24 20:31:28 · 259 阅读 · 0 评论 -
C++高级编程(五)模板
模板:属于泛型编程,泛型编程指的是代码“重用”,固定的代码但是其内部函数、对象类型或类可以不同。1、函数模板函数模板的声明形式为:template(参数表){ 函数体}#includeusing namespace std;templatevoid add(T a, Y b){ cout <<(int)a<<"+"<<(int)b<<"=" << a + b << endl;原创 2017-11-24 21:57:03 · 1587 阅读 · 0 评论 -
C++高级工程(六)预处理器
预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。预处理器的主要作用就是: 把通过预处理的内建功能对一个资源进行等价替换,最常见的预处理有: 文件包含,条件编译、布局控制和宏替换4种。 文件包含: #include 是一种最为常见的预处理,主要是做为文件的引用组合源程序正文。 条件编译: #if,#ifndef,#ifdef,#en原创 2017-11-25 20:11:47 · 469 阅读 · 1 评论 -
VS2013+MFC 简易音乐播放器
1、新建MFC应用程序,选择基于对话框,点击完成。2、选择工具箱中的对话框编辑器,被选择的编辑器修改其ID及名称。3、部分编辑器需要添加消息处理函数。编译中出现的错误:1、错误 1 error LNK2001: 无法解析的外部符号 "public: void __thiscall CSket原创 2017-11-08 21:45:35 · 12992 阅读 · 4 评论 -
递归
递归算法基本思想:找出递归子结构性质(原问题的解包含了子问题的解)、用子问题的解来递归定义原问题的解、找出递归终止条件。示例:例1 阶乘函数阶乘函数可递归地定义为:n! = 1 n = 0 (边界条件)n! = n(n-1)! n > 0 (递归方程)边界条件与递归方程是递归函数的二个要素,递归函数只有具备了这两个要素,才能在有限转载 2017-09-07 15:01:34 · 719 阅读 · 0 评论 -
C++学习笔记(五)
1、静态数组与动态数组只有静态数组可以用{}初始化,可以将指针看成是数组的迭代器,const创建数组时必须初始化,之后不能修改,静态数组的维数不能为0,动态数组的维数可以为0.静态数组:int a[10];动态数组:int *p=new int[5];2、指针数组和数组指针指针数组:int (*p)[4];相当于二维数组:int a[3][4];数组指针:int*p[4]原创 2017-04-26 21:22:46 · 257 阅读 · 0 评论 -
慢水填充
慢水填充:用一种特定的颜色填充连通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。经常被用来标记或分离图像的一部分,以便对其进行进一步处理或分析,也可以用来从输入图像获取掩码区域,掩码会加速处理过程,或只处理掩码指定的像素点,操作的结果总是某个连续的区域。基本思想:自动选中了种子点相连的区域,接着将该区域替换成指定的颜色,经常用来标记或者分离图像的一部分进行处理过程,或原创 2017-04-20 16:11:26 · 374 阅读 · 0 评论 -
C指针
第一章 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让 我们分别说明。 先声明几个指针放着做例子: 例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (转载 2017-04-17 09:37:55 · 452 阅读 · 0 评论 -
C++笔记(三)
1、字符串string库对象的定义和初始化有4种:string s1;string s2(s1);string s3(“hello”);string s4(5,‘c’);2、字符串输入cin标准输入,遇到空字符停止读入getline完整输入string 对象赋值不能将两个纯字符串字面值相加如:s1=“hello”+“world”;3、vector类动态原创 2017-04-25 10:06:16 · 271 阅读 · 0 评论 -
C++学习笔记(四)之 STL
1、映射map(映射),multimap(多映射)----------存取一对数据红黑树(数据结构)基本操作:insert:4种方法,count和find,erase:3种方法。不能通过find进行修改demo:#include#includeusing namespace std;int main(){ map a; multimapam; a原创 2017-05-09 19:42:52 · 285 阅读 · 0 评论 -
练习(六)
1、链接:https://www.nowcoder.com/questionTerminal/2bae2bca15904cde960a4411bd84018b来源:牛客网以下程序的输出结果为() #include #include void main() { char x[] = "STRING"; x[0] = 0; x[1] = '\原创 2017-08-03 23:22:47 · 1390 阅读 · 0 评论 -
从C到C++的升级
C++的语言类型C++是静态的强类型语言。静态语言:数据类型在编译期间检查,因此在写程序时需要声明变量的类型强类型语言:强调数据类型,不同的数据类型间的转换需要进行强制类型转换 C与C++的关系 1.C++继承所有C的特性 2.C++在C的基础上提供的更多的语法和特性-----类型加强,函数加强,异常处理 3.C++在C的基础转载 2017-06-20 16:10:43 · 303 阅读 · 0 评论 -
C++引用
转载请注明出处:http://www.cnblogs.com/Ljian1992/p/4198015.html概述 变量是一段实际的连续的存储空间的别名,程序中通过变量来申请并命名存储空间,并且通过变量的名字可以使用该存储空间。在C语言中一段实际的连续的存储空间只能有一个别名(指针不能当作别名),但在C++中一段实际的连续的存储空间却可以有多个别名,这一种实现的机制即为引转载 2017-06-20 09:10:03 · 277 阅读 · 0 评论 -
指针变量与变量地址
一、基本概念 存储单元一般应具有存储数据和读写数据的功能,以8位二进制作为一个存储单元,也就是一个字节。每个单元有一个地址,是一个整数编码,可以表示为二进制整数。程序中的变量和主存储器的存储单元相对应。变量的名字对应着存储单元的地址,变量内容对应着单元所存储的数据。存储地址一般用十六进制数表示,而每一个存储器地址中又存放着一组二进制(或十六进制)表示的数,通常称为该地址的内容。原创 2017-06-19 15:12:49 · 4372 阅读 · 0 评论 -
C++ - 将模板的声明和定义放置在同一个头文件里
1. 一个类:头文件用于保存类的声明;定义文件保存程序的实现。2. 分离编译模式:允许在一个编译单元(.cpp文件)中定义函数、类型、类对象等,然后在另一个编译单元中引用它们。编译器处理完所有的编译单元后,链接器接下来会处理所有指向extern符号的引用(有时为缺省),从而生成单一可执行文件。3. 模板类型:模板类性不是一种实类型,它必须等到类型绑定后才能确转载 2017-05-09 10:21:52 · 636 阅读 · 0 评论 -
如何理解c和c ++的复杂类型声明
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的C/C++声明。 我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地理解任何C/C++声明的“右左法则”。 需要强调一下的是,复杂的C/C++声明并不是好的编程风转载 2017-04-17 10:01:32 · 638 阅读 · 0 评论 -
C++ 中数据存储的分析
C++中,内存分为5个区:1.堆、2.栈、3.自由存储区4.全局/静态存储区和5.常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,转载 2017-06-20 10:01:56 · 991 阅读 · 0 评论 -
快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 从图中我们可以看到: left指针,right指针,原创 2017-09-07 14:34:03 · 444 阅读 · 0 评论
分享