![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++编程语言
文章平均质量分 89
vonmax007
To achieve victory we must mass our forces at the hub of all power & movement.The enemy's 'center of gravity'----Von Clausewitz
展开
-
fseek函数与ftell函数使用例程
fseek函数是 用来设定文件的当前读写位置.函数原型: int fseek(FILE *fp,long offset,int origin);函数功能:把fp的文件读写位置指针移到指定的位置.fseek(fp,20,SEEK_SET); 意思是把fp文件读写位置指针从文件开始后移20个字节.ftell函数是用来获取文件的当前读写位置;函数原型: long ftell(FILE *fp)函数功能原创 2017-09-01 12:12:20 · 451 阅读 · 0 评论 -
c++中的 extern "C"
比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL 输出(Export) 的函数,你需要用extern “C” 来强制编译器不要修改你的函数名。通常,在C 语言的头文件中经常可以看到类似下面这种形式的代码:#ifdef __cplusplus extern "C" { #endif /**** some declaration or so *****/ #if原创 2017-08-14 15:37:43 · 5211 阅读 · 0 评论 -
C++ 虚函数与继承的一个例子
通过隐含的this指针,也可以实现运行时多态:#include <iostream>class A {protected: int m_data;public: A(int data = 0) { m_data = data; } int getData() { return doGetData();原创 2017-08-14 10:02:22 · 5222 阅读 · 0 评论 -
关于静态函数只能调用静态变量
有次面试的时候被問到,说为什么静态函数只能调用静态变量,我一下懞了,平时只知道这样記着,所以也只能老实回答。面试完后补习了下这块的知识。推荐一篇很好的文章,关于C++中的this指针的:http://blog.csdn.NET/starlee/article/details/2062586首先得知道为什么要使用静态数据成员: 在类中,静态成员可以实现多个对象之间的数据共享,并且使用静态数据转载 2017-08-14 00:03:24 · 7757 阅读 · 0 评论 -
C++ STL set和multiset的使用
C++ STL set和multiset的使用std::set<int> s;那个s这个对象里面存贮的元素是从小到大排序的,(因为用std::less作为比较工具。)1,set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就 像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能原创 2017-08-05 17:41:51 · 5278 阅读 · 0 评论 -
STL中istream_iterator和ostream_iterator的基本用法
标准程序库定义有供输入及输出用的iostream iterator类,称为istream_iterator和ostream_iterator,分别支持单一型别的元素读取和写入。使用这两个iteratorclasses之前,先得含入iterator头文件:#include<iterator>现在让我们看看如何利用istream_iterator从标准输人装置中读取字符串(即类似cin功能): 就像所原创 2017-08-05 17:25:25 · 5252 阅读 · 0 评论 -
C++ dynamic_cast和static_cast
C语言中可以对内置类型进行强制转换,但是这样做不是很安全,在C++标准中,提供了关于类型层次转换中的两个关键字static_cast和dynamic_cast。一、static_cast关键字(编译时类型检查)用法:static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性,它主要有如下原创 2017-08-19 16:06:16 · 401 阅读 · 0 评论 -
C++中typeid的使用
RTTI(Run-TimeType Information, 运行时类型信息),它提供了运行时确定对象类型的方法。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。The typeid operator provides a program with the ability to retrieve the actual derived type of t原创 2017-08-19 14:34:42 · 492 阅读 · 0 评论 -
C++函数重载
C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,即函数的参数列表不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。函数重载有什么好处? 重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。当函数的编原创 2017-08-18 20:50:06 · 268 阅读 · 0 评论 -
C++构造函数和析构函数的调用顺序
1、构造函数的调用顺序基类构造函数、对象成员构造函数、派生类本身的构造函数 2、析构函数的调用顺序派生类本身的析构函数、对象成员析构函数、基类析构函数(与构造顺序正好相反) 3、特例局部对象,在退出程序块时析构 静态对象,在定义所在文件结束时析构 全局对象,在程序结束时析构 继承对象,先析构派生类,再析构父类 对象成员,先析构类对象,再析构对象成员#include <iostream>原创 2017-08-17 17:08:35 · 388 阅读 · 0 评论 -
网易2017校园招聘笔试程序题(分田地)
题目描述: 牛牛和 15 个朋友来玩打土豪分田地的游戏,牛牛决定让你来分田地,地主的田地可以看成是一个矩形,每个位置有一个价值。分割田地的方法是横竖各切三刀,分成 16 份,作为领导干部,牛牛总是会选择其中总价值最小的一份田地, 作为牛牛最好的朋友,你希望牛牛取得的田地的价值和尽可能大,你知道这个值最大可以是多少吗? 输入描述: 每个输入包含 1 个测试用例。每个测试用例的第一行包含两个整数原创 2017-08-22 01:59:16 · 985 阅读 · 0 评论 -
C++智能指针记录
导读最近在补看《C++ Primer Plus》第六版,这的确是本好书,其中关于智能指针的章节解析的非常清晰,一解我以前的多处困惑。C++面试过程中,很多面试官都喜欢问智能指针相关的问题,比如你知道哪些智能指针?shared_ptr的设计原理是什么?如果让你自己设计一个智能指针,你如何完成?等等……。而且在看开源的C++项目时,也能随处看到智能指针的影子。这说明智能指针不仅是面试官爱问的题材,更是原创 2017-08-15 16:57:43 · 6647 阅读 · 1 评论 -
C结构体之位域(位段)
以32位机为例,int 分为无符号 unsigned 和有符号 signed 两种类型,默认为signed。二者的区别就是无符号类型能保存2倍于有符号类型的数据。32位下,signed int 的表示范围为:-2147483648 ~ 2147483647 (最高位做符号位)。unsigned int 的表示范围为:0 ~ 4294967295 (不保留符号位)。我们都知道,两个不同的数据类型在进行转载 2017-09-01 11:31:55 · 206 阅读 · 0 评论 -
C++ 虚函数和纯虚函数的区别
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plain copy print?class A { public原创 2017-08-30 11:33:52 · 625 阅读 · 0 评论 -
函数的调用规则(__cdecl,__stdcall,__fastcall,__pascal)
关于函数的调用规则(调用约定),大多数时候是不需要了解的,但是如果需要跨语言的编程,比如VC写的dll要delphi调用,则需要了解。 microsoft的vc默认的是__cdecl方式,而windows API则是__stdcall,如果用vc开发dll给其他语言用,则应该指定__stdcall方式。堆栈由谁清除这个很重要,如果是要写汇编函数给C调用,一定要小心堆栈的清除工作,如果转载 2017-08-30 11:14:20 · 292 阅读 · 0 评论 -
STL系列之四 heap 堆
下面再介绍STL中与堆相关的4个函数——建立堆make_heap(),在堆中添加数据push_heap(),在堆中删除数据pop_heap()和堆排序sort_heap():头文件 #include <algorithm>下面的_First与_Last为可以随机访问的迭代器(指针),_Comp为比较函数(仿函数),其规则——如果函数的第一个参数小于第二个参数应返回true,否则返回false。建立堆转载 2017-08-29 00:23:00 · 338 阅读 · 0 评论 -
进程内存布局
一个由 C/C++编译的程序占用的内存(memory)分为以下几个部分:1. 程序代码区(.text) - 存放函数体的二进制代码 。2. 文字常量区(.rodata) - 常量字符串就是放在这里的,程序结束后由系统释放(rodata—read only data)。3. 全局区/静态区(static) - 全局变量 和 静态变量的存储是放在一块的转载 2017-09-05 23:42:16 · 260 阅读 · 0 评论 -
C++ 中的pair
pair的类型: pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。。 pair<string,int> p; pair<int ,int > p; pair<double,int> p; 都可以。。。 应用:如果一个函数有两个返回值 的话,如果是相同类型,就可以用数组返回,如果是不同类型,就原创 2017-08-28 02:07:44 · 331 阅读 · 0 评论 -
C++的迭代器
迭代器是C++标准库中的重要组件,特别是在容器内部,没有迭代器,容器也就无所谓存在了。例如:vector容器简而言之就是3个迭代器 start finish 以及end_of_storage vector的任何操作都离不开这3个迭代器。。接下来,总结一下C++ 中的迭代器的操作。C++的迭代器分为5类,依次为 : Input_iterator, output_iterator, forwrd_原创 2017-08-28 01:54:26 · 526 阅读 · 0 评论 -
C++11特性:auto关键字
阅读目录C++98 autoC++11 autoauto的用法注意事项 正文前言本文的内容已经不新鲜了。关于auto,翻来覆去被人知道的都是这些东西,本文并没有提出新颖的auto用法。本人原是痛恨博客一篇篇都是copy而来缺乏新意的探索,当然,本文不是copy而来,但发布这样一篇大家皆知的文章心里甚是惶恐。本文对auto的内容加以整理,权当是自己的复习笔记了。回到顶部C++98 auto早转载 2017-08-28 01:29:48 · 278 阅读 · 0 评论 -
阿里2018校招内推笔试题-字符串切分
思路,类似于LeetCode Word Break II,参考之后计算空格数量就行。// Ali02.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <fstream>#include <string>#include <vector>#include <list>#include <stack原创 2017-08-25 21:44:40 · 1570 阅读 · 0 评论 -
C++构造函数与析构函数能否为虚函数
结果:构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。引用 To construct an object, a constructor needs the exact type of the object it is to create. Consequently, a constructor cannot be virtu原创 2017-08-17 11:55:13 · 356 阅读 · 0 评论 -
华为2018优招笔试题
我的思路,顺序遍历,还能咋地~~// HUAWEI02.cpp : 定义控制台应用程序的入口点。//#include <iostream>#include <fstream>#include <string>#include <vector>#include <list>#include <stack>#include <map>#include <queue>#include <原创 2017-08-16 21:26:27 · 10481 阅读 · 0 评论 -
VS检测内存泄漏,定位泄漏代码位置方法
1、什么是内存泄漏?内存泄漏指的是在程序里动态申请的内存在使用完后,没有进行释放,导致这部分内存没有被系统回收,久而久之,可能导致程序内存不断增大,系统内存不足……引发一系列灾难性后果;(关于程序申请内存分配方式,详见:内存分配方式)2、零容忍排除内存泄漏对于程序的稳健型特别重要,尤其是程序需要长时间、稳定地运行时。C++这类动态内存申请释放都是由程序员控制的语言,稍不注意,很有可能就会有未释转载 2017-05-29 00:15:16 · 5335 阅读 · 0 评论 -
C/C++内存泄漏及检测
“该死系统存在内存泄漏问题”,项目中由于各方面因素,总是有人抱怨存在内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。如果程序运行时间足够长,如后台进程运行在服务器上,只要服务器不宕机就一直转载 2017-05-28 17:03:22 · 3991 阅读 · 0 评论 -
联合体(union)的使用方法及其本质
有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体(struct)中所有变量是“共存”的——优点是“有容乃转载 2017-05-16 11:41:08 · 2843 阅读 · 0 评论 -
条件编译#ifdef的妙用详解_透彻
这几个宏是为了进行条件编译。一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部 分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。 条件编译命令最常见的形式为: #ifdef 标识符 程序段1 #else 程序转载 2017-03-29 12:20:57 · 7026 阅读 · 0 评论 -
C++批量生成大规模随机数中种子值设置的总结——解决随机数序列重复问题
今天编了一个遗传算法的小程序。在个体类的默认构造函数中,使用随机数来进行二进制编码的初始化。C++中的随机数其实是伪随机数,即随机数函数产生的是通过公式计算出来的一系列伪随机数,这个公式会采用一个种子数计算出一个数,而该数将成为产生下一个数的种子数。基于产生随机数的原理,如果采用相同的种子的话,两次调用随机数后产生的随机数序列将是一样的。一般情况下,在C++中使用当前时间作为种子数,这样两次调用随原创 2017-04-10 22:32:53 · 5231 阅读 · 1 评论 -
c++中的左值与右值
左值(lvalue)和右值(rvalue)是 c/c++ 中一个比较晦涩基础的概念,不少写了很久c/c++的人甚至没有听过这个名字,但这个概念到了 c++11 后却变得十分重要,它们是理解 move/forward 等新语义的基础。左值右值的定义左值与右值这两概念是从 c 中传承而来的,在 c 中,左值指的是既能够出现在等号左边也能出现在等号右边的变量(或表达式),右值指的则是只能转载 2017-05-04 12:07:29 · 1614 阅读 · 0 评论 -
【C++】unsigned int和补码
文章要讨论的是两部分:1. 原码,反码和补码。2. short, unsigned short, int, unsigned int, long, unsigned long的表示及转换 1. 原码,反码和补码原码是最直观的表示方式:最高位表示符号(0表示正,1表示负),其余位表示大小。假设占位为1字节的数,原码表示的范围就是[-127 ~ 127]一共255个数字。理论上8个bit可以表原创 2017-05-23 15:48:32 · 4103 阅读 · 0 评论 -
【STL】C++标准库bitset类型
bitset用于处理二进制位集。是一种类模板。[cpp] view plain copy print?#include<bitset> using std::bitsset #include<bitset>using std::bitsset1. 定义和初始化 在定义bitset时,要明确bitset是多少位,须在尖括号中制定它的长度值。[cpp] view plain co原创 2017-05-23 15:35:00 · 2939 阅读 · 0 评论 -
野指针
原文地址:http://www.cnblogs.com/yc_sunniwell/archive/2010/06/28/1766854.html讨论一什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业。但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕转载 2017-05-23 15:03:32 · 2673 阅读 · 0 评论 -
C++父类子类间函数重定义,虚函数重写(覆盖)以及重载
写这篇文章的时候我还是不太确定重定义,重写(覆盖),重载之间的确切的区分方法。下面是我今天的理解以及相关测试代码,以待后观!! 第一:简单的子类重定义父类成员函数(函数三要素:返回类型,函数名,参数):既然是重定义,函数名肯定是相同的,不然就没有必要讨论了。三要素都相同,自然可以成立,现在的问题是返回类型和参数是不是可以随意给,同样能隐藏父类的成员函数? (1)函数名,返回类型,参数都相同#in原创 2017-05-31 10:58:32 · 9696 阅读 · 2 评论 -
【STL】反向迭代器(Reverse Iterator)
1. 定义反向迭代器(Reverse Iterator)是一种反向遍历容器的迭代器。也就是,从最后一个元素到第一个元素遍历容器。反向迭代器将自增(和自减)的含义反过来了:对于反向迭代器,++运算将访问前一个元素,而–运算则访问下一个元素。2. 作用(1)反向迭代器需要使用自减操作符:标准容器上的迭代器(reverse_iterator)既支持自增运算,也支持自减运算。但是,流迭代器由于不能反向原创 2017-05-20 13:27:15 · 2849 阅读 · 0 评论 -
C++处理输入输出汇总
面试中好多次卡在处理输入输出上了,所以本次要好好总结一下。C++ getline的使用getline(istream &in, string &s)从输入流读入一行到string s•功能: –从输入流中读入字符,存到string变量 –直到出现以下情况为止: •读入了文件结束标志 •读到一个新行 •达到字符串的最大长度 –如果getline没有读入字符,将返回false,可用于判断文件原创 2017-08-08 22:56:20 · 7103 阅读 · 1 评论 -
Math.Round()其值
题目大概是问Math.Round(11.5);和Math.Round(-11.5);返回值是多少?原来不是四舍五入这么简单,其实是四舍六入,但是五是很有讲究的。要是遇到五则取离前一位最近的偶数。比如,这条题目,11.5返回值就是12.0;-11.5返回值就是-11.0; 但是这里其实也不是这么简单:看下面的例子:Math.Round(3.44, 1); //Returns 3.4.Math.R原创 2017-07-31 13:40:55 · 5539 阅读 · 0 评论 -
比较两个字符串的连接模式是否相同
题目要求是,输入两个字符串,s和t,比较俩个字符串的连接模式是否相同。其中字符串连接模式可以定义为,字符串中字符的出现规律。 例如: feed 和 goot,其中ee和oo出现位置相同,所以其拼接模式相同; paper和title,paper中的p和titile中的t出现位置相同; newspaper和 dog,字符串长度相同,所以拼接模式不可能相同; zoo和aac, oo连续出现在位置原创 2017-07-29 21:46:05 · 5712 阅读 · 1 评论 -
C++位段
欢迎使用Markdown编辑器写博客本Markdown编辑器使用[StackEdit][6]修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用原创 2017-07-01 09:43:49 · 4631 阅读 · 0 评论 -
C++中的“不完全类型”
用delete删除一个只有声明但无定义的类型的指针,是危险的。这通常导致无法调用析构函数(包括对象本身的析构函数、成员/基类的析构函数),从而泄露资源。示例代码:引用:class C; // 在另一个cpp文件中定义C* createC(); // 在另一个cpp文件中定义int main() { C* p = createC();原创 2017-05-22 16:44:49 · 4277 阅读 · 0 评论 -
VS内存泄露检测方法
方法一、通过内存状态比较1、功能:可以检测某段代码间的内存泄露.2、描述: 若要确定代码中某一部分是否发生了内存泄漏,可以在该部分之前和之后对内存状态拍快照,然后使用 _CrtMemDifference 比较这两个状态: _CrtMemState s1, s2, s3; _CrtMemCheckpoint(&s1); // memory allocations take plac转载 2017-05-22 15:57:12 · 3158 阅读 · 0 评论