
c++
Rage_
西北工业大学明德学院
展开
-
getline()详解
本文转自:http://blog.sina.com.cn/s/blog_60263c1c0101ck25.html学习C++的同学可能都会遇到一个getline()函数,譬如在C++premer中,标准string类型第二小节就是“用getline读取整行文本”。书上给的程序如下:int main(){ string line: while(ge转载 2017-06-27 13:55:30 · 478 阅读 · 0 评论 -
C++ Primer 总结
收藏C++ Primer 总结,西电硕,大佬精髓帖子。很好https://blog.youkuaiyun.com/misayaaaaa/article/details/53786215转载 2018-10-03 16:21:51 · 332 阅读 · 0 评论 -
Effective C++第三章总结
条款13:以对象管理资源 例: void f() { Investment *pInv = createInvestment(); ... //这里存在诸多“不定因素”,可能造成delete pInv;得不到执行,这可能就存在潜在的内存泄露。 delete ...原创 2018-09-25 00:58:57 · 261 阅读 · 0 评论 -
Effective C++第二章总结
2.构造/析构/赋值运算几乎你写的每个类都会有一或多个构造函数、一个析构函数、一个拷贝赋值操作符。如果这些函数犯错,会导致深远且令人不愉快的后果,遍及整个类。所以确保它们行为正确时生死攸关的大事。 条款05:了解C++默默编写并调用哪些函数 如果你自己没声明,编译器就会为类声明(编译器版本的)一个拷贝构造函数,一个拷贝赋值操作符和一个析构函数。此外如果你没有声明任何构造函数,编...原创 2018-09-09 01:45:56 · 298 阅读 · 0 评论 -
二分查找(Binary Search)复习
1、定义 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。2、基本思想 二分查找的基本思想是: 设R[low..high]是当前的查找区间 (1)首先确定该区间的中点位置: (2)然后将待查的K...转载 2018-08-22 00:22:55 · 488 阅读 · 0 评论 -
Effective C++第一章总结
1.让自己习惯C++条款01:视C++为一个语言联邦 为了更好的理解C++,我们将C++分解为四个主要次语言:C。说到底C++仍是以C为基础。区块,语句,预处理器,内置数据类型,数组,指针统统来自C。 Object-Oreinted C++。这一部分是面向对象设计之古典守则在C++上的最直接实施。类,封装,继承,多态,virtual函数等等... Template C++。这是...原创 2018-08-30 17:17:40 · 228 阅读 · 0 评论 -
C++STL中vector容器 begin()与end()函数、front()与back()的用法
一、begin函数函数原型:iterator begin();const_iterator begin();功能:返回一个当前vector容器中起始元素的迭代器。 二、end函数函数原型:iterator end();const_iterator end();功能:返回一个当前vector容器中末尾元素的迭代器。 三、front函数函数原...转载 2018-08-27 00:52:37 · 2538 阅读 · 0 评论 -
由C++类指针初始化引起的问题汇总
这道题是c++编程中因为失误出现的错误,结果选错了,这里做个笔记。 原文链接:http://longzxr.blog.sohu.com/213486896.html还是得从最近一个比较“诡异”的问题说起:C++ 类指针定义的时候没有初始化的时候,居然可以安全的调用类内部的成员函数而不出错。 这段代码是来源于之前项目,然后我把问题抽离出来,另开一个工程测试的时候,还是这...转载 2018-08-26 19:51:58 · 227 阅读 · 0 评论 -
C++继承内存模型一道笔试题(完美世界)
下列等式正确的是()?正确答案: A A pA==pC&&pB!=pCB pA==pC&&pB==pCC pA!=pC&&pB!=pCD pA!=pC&&pB==p 链接:https://www.nowcoder.com/questionTerminal/d372baa5e8954ac6b51...原创 2018-08-26 19:32:41 · 389 阅读 · 0 评论 -
C++中extern “C”含义深层探索
之前做很多项目,都用到了extern “C”,这里整理一下extern “C”的作用。本文转自:http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容...转载 2018-10-03 21:13:16 · 174 阅读 · 0 评论 -
C++ STL迭代器失效情况总结
本文转自:https://www.cnblogs.com/Commence/p/7526421.html1.对于序列式容器:vector,queue(C++的序列式容器有vector、deque、list、forward_list、array和string几种)等,序列式容器就是数组式容器,删除当前的iterator会使得后边所有元素的iterator都失效。这是因为其使用了连续分配的内存,阐...转载 2018-10-03 22:13:16 · 486 阅读 · 0 评论 -
【C++】explicit关键字
本文转自:https://www.cnblogs.com/dwdxdy/archive/2012/07/17/2595479.htmlC++提供关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换发生.声明为explicit的构造函数不能在隐式转换中使用.C++中,一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数),承担了两个角色.1....转载 2019-07-18 00:21:56 · 199 阅读 · 0 评论 -
c++ vector中的resize与reserve
关于STL中vector的resize与reserve方法,作以下记录:1.reserve(n):预分配n个元素的存储空间。如:vector<int> vecData;vecData.reserve(10);调用reserve(10)方法后,则为vecData预分配了可以存储十个int对象的存储空间,但仅仅是分配空间,里面并没有存储对象。我们知道容器中会有初始预...转载 2019-07-28 22:29:10 · 529 阅读 · 0 评论 -
find和find_if算法
1、STL算法里的find和find_if算法的使用:区别于联系:联系:这个两个函数都是查找某个元素位置的方式;区别:其中find值适用于查找其里面元素值的位置。而find_if值使用与函数第三个参数的为判别式时的使用。template<class InputIterator, class T>InputIterator find ( InputIterator first...转载 2019-07-28 22:25:42 · 1363 阅读 · 0 评论 -
C++中vector的删除
在vector中有三种涉及删除的方法,第一种是vector::clear(),第二种是vector::erase(),第三种是vector::pop_back()。clear用来清空整个vector,同时将size变成0,无返回值;erase通过传入迭代器进行删除,既可以删除单个元素,也可以删除某一范围的元素,删除之后它将返回下一个位置的迭代器;pop_back用来删除末尾元素,同时将...转载 2019-07-28 22:21:05 · 11270 阅读 · 1 评论 -
c++11 多线程
前言:前段时间初看了下Boost库,看到线程学了下。c++11是有线程的,这个之前我也是知道的,但就感觉自己没怎么系统的学过,翻了下c++primer 居然没有讲线程的,真是坑啊。。。怪不得总感觉自己学c++语言方面没系统的学过这东西。。还是看的少。多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任务处理:基于进程和基于线程。...转载 2019-04-04 01:00:00 · 907 阅读 · 0 评论 -
STL底层数据结构
C++ STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见STL源码剖析P146,支持首尾(中间不能)快速增删,也支持随机访问deque是一个双端队列(double-ended que...转载 2018-10-08 10:48:32 · 210 阅读 · 0 评论 -
移动语义和右值引用
右值引用:c++的传统引用(现在成为左值引用)使得时标符关联到左值。左值是一个表示数据的表达式(如变量名或解除引用的指针),程序可以获取其地址。C++11新增了右值引用,用&&表示。右值引用可以关联到右值,即可出现在赋值表达式的右边,但不能对其应用地址运算符的值。右值包括字面常量、如x+y等表达式以及返回值的函数:int x =10;int y = 23;int...原创 2018-10-07 17:29:54 · 506 阅读 · 0 评论 -
C++如何实现只能动态分配类对象,不能定义类对象
动态分配类对象:就是使用运算符new来创建一个类的对象,在堆上分配内存。静态分配类对象:就是A a,由编译器创建类对象,在栈上分配内存。1)动态分配类对象把类的构造函数和析构函数设为protected属性。类对象不能访问,但是派生类可以继承,也可以访问。同时,创建create和destroy两个函数,用于创建类对象。(create函数设为static,原因是,创建对象的时候A ...转载 2018-09-27 00:18:34 · 575 阅读 · 0 评论 -
RTTI与类型转换运算符复习
什么是RTTI﹖ 在C++ 环境中﹐头文件(header file) 含有类之定义(class definition)亦即包含有关类的结构资料(representational information)。但是﹐这些资料只供编译器(compiler)使用﹐编译完毕后并未留下来﹐所以在执行时期(at run-time) ﹐无法得知对象的类资料﹐包括类名称、数据成员名称与类型、函数名称与类型...原创 2018-08-17 00:29:49 · 328 阅读 · 0 评论 -
经典面试题之new和malloc的区别
new和malloc的区别是C/C++一道经典的面试题,我也遇到过几次,回答的都不是很好,今天特意整理了一下。0. 属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1. 参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。...转载 2018-08-01 15:12:10 · 295 阅读 · 0 评论 -
C++中基类的析构函数为什么要用virtual虚析构函数
C++中基类的析构函数为什么要用virtual虚析构函数知识背景 要弄明白这个问题,首先要了解下C++中的动态绑定。 关于动态绑定的讲解,请参阅: C++中的动态类型与动态绑定、虚函数、多态实现正题 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。...转载 2018-02-13 19:31:27 · 144 阅读 · 0 评论 -
C++ 拷贝构造函数和赋值运算符
本文转自:https://www.cnblogs.com/wangguchangqing/p/6141743.html文主要介绍了拷贝构造函数和赋值运算符的区别,以及在什么时候调用拷贝构造函数、什么情况下调用赋值运算符。最后,简单的分析了下深拷贝和浅拷贝的问题。拷贝构造函数和赋值运算符在默认情况下(用户没有定义,但是也没有显式的删除),编译器会自动的隐式生成一个拷贝构造函数和赋值运算符。但用户可以转载 2018-01-18 15:01:42 · 184 阅读 · 0 评论 -
c++常规new和定位(placement)new
定位放置new操作的语法形式不同于普通的new操作。例如,一般都用如下语句A* p=new A;申请空间,而定位放置new操作则使用如下语句A* p=new (ptr) A;申请空间,其中ptr就是程序员指定的内存首地址。通常,定位new负责在堆中找到一个足以能满足要求的内存块。new运算符还有另外一种变体,被称为定位(placement)new运算符,他让您能够制定要使用的位置。例子如下原创 2018-01-17 16:24:22 · 1106 阅读 · 0 评论 -
水题——蓝桥杯——算法训练 6-1 递归求二项式系数值
算法训练 6-1 递归求二项式系数值 时间限制:10.0s 内存限制:256.0MB 问题描述样例输入一个满足题目要求的输入范例。3 10样例输出与上面的样例输入对应的输出。数据规模和约定 输入数据中每一个数的范围。 例:结果在int表示时不会溢出。蓝桥杯水题,秒写代码。原创 2017-12-04 23:43:50 · 423 阅读 · 0 评论 -
Uva10815
Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, not quite enough. Instead of thinking up all the wo原创 2017-12-03 23:14:49 · 596 阅读 · 0 评论 -
基础练习 字母图形
问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式:输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式:输出n行,每个m原创 2017-11-15 23:05:55 · 1144 阅读 · 2 评论 -
木块问题Uva101
Uva 101 the block problem 木块问题题目大意:输入n,得到编号为0~n-1的木块,分别摆放在顺序排列编号为0~n-1的位置。现对这些木块进行操作,操作分为四种。1、move a onto b:把木块a、b上的木块放回各自的原位,再把a放到b上;2、move a over b:把a上的木块放回各自的原位,再把a发到含b的堆上;3、p转载 2017-11-28 18:00:40 · 709 阅读 · 0 评论 -
Uva10474
Where is the Marble? DescriptionRaju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on them. At the beginning, Raju would place the marbles one aft转载 2017-11-28 15:53:53 · 123 阅读 · 0 评论 -
快速排序复习
https://blog.youkuaiyun.com/qq_36528114/article/details/78667034https://www.cnblogs.com/foreverking/articles/2234225.html具体的算法过程,网上十分多,这里不再多余说了,上面两个是我看的觉得不错的。一些直接上我写的代码:#include<iostream>using namesp...转载 2018-06-23 13:01:28 · 190 阅读 · 0 评论 -
Visual Assist 最有用的快捷键
VA最有用的几个快捷键:1、Alt + G: 在定义与声明之间互跳。2、Alt + O: 在.h与.cpp之间互跳。(O是字母O,不是数字零)3、Alt + Shift + Q:鼠标定位到函数名上,若是在h文件中,按此快捷键会弹出右键菜单,里面有个选项--创建定义;若是在cpp文件中,则按此快捷键会弹出右键菜单,里面有一个选项--创建声明。 这在定义好接口之后,再来写实现时,配合Alt+O是非常快...转载 2018-06-19 23:12:54 · 223 阅读 · 0 评论 -
LeetCode 48 旋转图像
给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:给定 matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3...转载 2018-07-31 20:41:57 · 327 阅读 · 0 评论 -
c++ const和#define区别
C++ 语言可以用const 来定义常量,也可以用#define 来定义常量。但是前者比后者有更多的优点:(1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。(2) 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。规则5-2-1:在C+...转载 2018-07-14 11:00:29 · 2281 阅读 · 0 评论 -
C++纯虚函数与抽象类复习
C++基础之纯虚函数与抽象类引言 纯虚函数在C++编程中的地位很重要,其关联到了设计模式中“接口”的概念。语法 纯虚函数的语法: 1、 将成员函数声明为virtual 2、 后面加上 = 0 3、 该函数没有函数体1 class <类名>2 {3 virtual <类型><函数名>(<参数表>) = 0;4 ...转载 2018-07-14 10:36:16 · 423 阅读 · 0 评论 -
c++运行时多态复习
C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数 1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是和类...转载 2018-07-14 10:23:57 · 2619 阅读 · 0 评论 -
c++static修饰符复习
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include <iostrea...转载 2018-07-13 20:12:54 · 197 阅读 · 0 评论 -
c++const复习总结
const 是constant的缩写,本意是不变的,不易改变的意思。const 在C++中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数一、const修饰普通类型的变量。直接修饰普通常量没有什么要点问题。二、在修饰指针变量时:const 修饰指针变量有以下三种情况。A:const 修饰指针指向的内容,则内容为不可变量。B:const 修饰指针,则指针为不可变量。C:const 修饰...原创 2018-07-13 19:28:47 · 253 阅读 · 0 评论 -
c++智能指针复习
1. 智能指针背后的设计思想我们先来看一个简单的例子:void remodel(std::string & str){ std::string * ps = new std::string(str); ... if (weird_thing()) throw exception(); str = *ps; delete ...转载 2018-07-23 23:29:59 · 476 阅读 · 0 评论 -
c/C++栈和堆
一、预备知识―程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)―,...转载 2018-07-23 22:43:13 · 235 阅读 · 0 评论 -
c++11 constexpr
constexpr是C++11中新增的关键字,其语义是“常量表达式”,也就是在编译期可求值的表达式。最基础的常量表达式就是字面值或全局变量/函数的地址或sizeof等关键字返回的结果,而其它常量表达式都是由基础表达式通过各种确定的运算得到的。constexpr值可用于enum、switch、数组长度等场合。constexpr所修饰的变量一定是编译期可求值的,所修饰的函数在其所有参数都是cons...转载 2019-07-30 09:18:13 · 300 阅读 · 0 评论