
C/C++编程
文章平均质量分 96
PengStrongLee
这个作者很懒,什么都没留下…
展开
-
C++之Map
看到一篇介绍map很不错的文章,转载一下,感谢原作者的整理。转载地址:http://blog.youkuaiyun.com/shuzfan/article/details/53115922一 声明二 插入操作1 使用 进行单个插入1 使用insert进行单个和多个插入三 取值四 容量查询五 迭代器六 删除交换1 删除2 交换七 顺序比较八 查找九 操作符转载 2017-03-17 09:44:04 · 606 阅读 · 0 评论 -
2、尾部的零
问题描述:设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2.这个问题相信很多老铁都已经遇到过了,很经典的一个题目,还是那句老话,重要的是考虑的过程,是如何想到以5的个数来统计0的个数呢?又是如何想到除以25、除以125... ...的呢?这些事重点。首先n!中,哪些数字相乘可能会出现0呢,最简单的也是最根本的2*5(即使原创 2018-01-14 15:30:38 · 323 阅读 · 0 评论 -
4、丑数 II
问题描述:设计一个算法,找出只含素因子2,3,5 的第 n 小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例如果n = 9, 返回 10这一题思路很具有技巧性。其实说白了就是一个多链表Merge Sort的变形,看如下过程:Ugly Number: 1, 2, 3, 4,原创 2018-01-18 10:54:46 · 374 阅读 · 0 评论 -
C语言函数指针实现多态特性
1、函数指针函数指针是指向函数的指针变量,本质上是一个指针,类似于int*,只不过它是指向一个函数的入口地址。有了指向函数的指针变量后,就可以用该指针变量调用函数,就如同用指针变量引用其他类型变量一样。指针函数一般有两个作用:调用函数和做函数的参数。2、函数指针实现多态先来上一段代码:#include #include #include typedef int(*P原创 2018-01-09 16:29:14 · 2797 阅读 · 0 评论 -
C语言编译过程
IDE的使用让很多和我一样的人对C/C++可执行程序的底层生成一知半解,不利于我们深入理解原理。在这里小结一下,望路过的大神指正~前言:从一个源文件(.c文件)到可执行程序到底经历了哪几步,我想很多人都知道,但是每一步具体做了什么,估计很多像我一样的人就不能说的清清楚楚,明明白白了。编辑一个小程序,hello.c#include #include int mai转载 2018-01-10 10:05:20 · 1295 阅读 · 0 评论 -
STL之vector容器元素删除
删除vector容器的对象元素有三种方法:pop_back,erase,remove算法。向量容器的成员函数pop_back()可以删除最后一个元素;函数erase()可以删除由一个iterator指出的元素,也可以删除一个指定范围内的元素;通用算法remove()也可以用来删除vector容器的元素,不同的是remove一般情况下不会改变容器的大小,而pop_back()和erase转载 2018-01-30 10:06:23 · 2980 阅读 · 0 评论 -
C语言变长数组
【前言】 C语言中是不能定义变长数组的(当然,有一些特殊方法可以解决,这里先不提),代码中若遇到类似这样的结构:char data[0],这种用法在linux内核代码中有很多,这是为了让数组长度可变的,根据需要进行分配,方便操作,节省内存空间。 【data[0]结构】 例如:struct buffer{ int data_len; //长度 char...原创 2018-03-28 09:23:12 · 11031 阅读 · 2 评论 -
C++模板元编程
所谓的元编程就是编写直接生成或操纵程序的程序,C++模板为C++语言提供了元编程的能力。模板使 C++ 编程变得异常灵活,能实现很多高级动态语言才有的特性(语法上可能比较丑陋,一些历史原因见下文)。普通用户对 C++ 模板的使用可能不是很频繁,大致限于泛型编程,但一些系统级的代码,尤其是对通用性、性能要求极高的基础库(如 STL、Boost)几乎不可避免的都大量地使用 C++ 模板...转载 2018-06-13 09:42:22 · 10390 阅读 · 1 评论 -
C语言中的restrict限定符
今天在写opencl的kernel端代码时用到了restrict关键字,做个记录。restrict限定符的作用C语言中的一种类型限定符,用于告诉编译器,对象已经被指针所引用,不能通过除去该指针以外的所有其他直接或间接的方式修改该对象的内容restrict限定符的用法restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针,表明该指针是访问该对象唯一且初始的方式。要弄明白为什么...原创 2018-06-15 12:42:38 · 2840 阅读 · 1 评论 -
C/C++ I/O详解
一、C语言I/OC语言的I/O相关函数都是封装在头文件<stdio.h>中,该头文件中定义了一些变量、宏以及各种函数来执行输入输出。具体有关C标准库<stdio.h>参见:http://www.runoob.com/cprogramming/c-standard-library-stdio-h.html注意:C语言把所有的设备都当做文件(设备只是一种特殊的文件),所以所有设...原创 2018-06-28 14:04:03 · 3898 阅读 · 0 评论 -
C/C++关键字之extern
先来看一段代码,这段代码是jni自动生成的代码。/* DO NOT EDIT THIS FILE - it is machine generated */#include /* Header for class TestJni */#ifndef _Included_TestJni#define _Included_TestJni#ifdef __cplusplusextern原创 2017-05-08 13:14:07 · 411 阅读 · 0 评论 -
我的第一个Windows程序-----HelloWindow
/*----------------------------------------------------------------------------------- HelloWin.cpp -- Displays "Hello, Windows 7!" in client area *------------------------------------------转载 2017-02-15 18:51:39 · 879 阅读 · 0 评论 -
预定义常量_WIN32,WIN32,_WIN64的区别
VC2012 下写 Windows 程序时,有时需要判断编译环境。在之前的文章《判断程序是否运行在 Windows x64 系统下。》里说过如何在运行期间判断系统环境,但在编译时如何判断? MSDN 里说,VC 有 3 个预处理常量,分别是 _WIN32,_WIN64,WIN32。这三个常量如何使用呢?看起来简单,其实是很困惑的。 在 Win32 配原创 2017-02-12 17:14:51 · 1393 阅读 · 0 评论 -
堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节转载 2017-02-10 12:05:42 · 278 阅读 · 0 评论 -
extern 'C'用法解析
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有转载 2017-02-09 11:01:31 · 343 阅读 · 0 评论 -
C++指针delete后需要做
C++标准规定:delete空指针是合法的,没有副作用。所以我们一般在delete后就以为万事大吉了,其实这是不安全的。 我们在Delete指针后赋值为NULL或0是个好习惯。对一个非空指针delete后,若没有赋NULL,若再次delete的话有可能出现问题。如下代码:可以看出delete是释放指针指向的内存,并不是指针本身所占有的内存。所以delete后,指针的原创 2017-03-24 12:34:24 · 2389 阅读 · 0 评论 -
C++单例模式原理与实现
今天有一个同学问我单例模式的实现方式,就顺手写篇文章记录一下。单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多原创 2017-03-24 12:17:53 · 1008 阅读 · 0 评论 -
从C++指针定义字符串和数组定义字符串区别到C++堆和栈区别
先以一个前辈写的经典开头://main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main() { int b; 栈 char s[] = "abc"; 栈 char *p2; 栈 char原创 2017-04-01 09:47:31 · 544 阅读 · 0 评论 -
C++之Set
转载自:http://blog.youkuaiyun.com/wangran51/article/details/8836160感谢总结!set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。平衡二叉检索转载 2017-03-26 07:43:57 · 338 阅读 · 0 评论 -
算法之路(二)
上一篇写了DFS的递归方式实现,这次写一下非递归实现。原理其实非常简单:我用栈去实现的,栈实现的基本思路是将一个节点所有未被访问的“邻居”(即一层层邻居节点)压入栈中“待用”,然后围绕顶部节点猛攻,每个节点访问 后被弹出。下面是实现的代码,仅供参考~#include #include using namespace std;#define MaxNode 20#原创 2017-03-16 21:45:43 · 358 阅读 · 0 评论 -
Linux线程(一)创建与退出
多线程目的是在单进程环境下执行多个任务。一个进程中的所有线程都可以访问该进程的组成部件,如文件描述符和内存。单个资源在多个用户间共享,就必须处理一致性问题。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存储(th...原创 2018-10-09 17:48:04 · 574 阅读 · 0 评论