C++
文章平均质量分 71
C++是一门在C语言的基础上发展出来的面向对象的编程语言,C++具有很高的灵活性,程序员的权利更大,另外C++具有良好的性能,所以在企业中具有广泛的应用。另外,使用C++编程,可以使我们更接近程序的底层,了解程序底层的原理。相对其他的高级语言C++是门具有一定难度的编程语言,C++的学习需要花一定的功夫。本专栏记录C++基础相关的知识。
Lavi_qq_2910138025
这个作者很懒,什么都没留下…
展开
-
Visual C++ 和 C++ 有什么区别?
有位同学问我“Visual C++和C++有什么区别?”,这的确是初学者会感到困惑的问题,比较常见。除此之外,还有“先学C++好,还是先学Visual C++好?”,都属于同样的概念不明的问题,就比如问“英语和英语词典有什么区别”一样。要弄清这个问题的答案,就要明白语言,工具,库,标准的概念。可以参考我之前发的 Programming Language 那篇笔记。一门程序语言,例如C++,根本上是一套语法体系,是逻辑领域上的规则集。而要真正使用计算机来应用程序语言,就需要有相应的语言实现,历史上,C++有转载 2021-03-05 11:31:32 · 1763 阅读 · 0 评论 -
C++之容器set和multiset
有关set和multi的介绍和API参考:【C++ STL学习之五】容器set和multiset在这里分享一个使用multiset容器的剑指offer上的面试题最小的K个数。题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。class Solution {public: vector<int>...原创 2019-01-07 12:44:45 · 227 阅读 · 0 评论 -
C++/C中!和~的区别与作用
区别:!是逻辑运算符(与||,&&是一类符号),表示逻辑取反,可以把非0值变成0,把0值变为1~是位运算符(与|,&是一类符号),表示按位取反,在数值的二进制表示上,将0变为1,将1变为0例子:#include<iostream>using namespace std;int main(){ int a = 10; int b = 0; ...原创 2019-01-05 15:22:54 · 35690 阅读 · 7 评论 -
C++中两种实现堆的方式:make_heap和priority_queue
在实现一些算法的时候,会用到大大顶堆和小顶堆,下面介绍两种在C++中实现队的两种方式。1 make_heap()方式make_heap(): 生成堆,他有两个参数,也可以有三个参数,前两个参数是指向迭代器的开始元素和指向迭代器的结束元素。第三个参数是可选的,可以用伪函数less()和greater()来生成大顶堆和小顶堆,其中type为元素类型。**如果只传入前两个参数,默认是生成大顶堆,**...原创 2018-12-30 11:04:49 · 3640 阅读 · 0 评论 -
剑指offer: 把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思想观察数组发现是所有的整数构成的数组,简单起见大家先考虑如果是仅由一位整数构成的数组,如{7,3,8}。这样的数组可以按照元素的大小将数组按照增序排序{3,7,8},然后拼接起来输出3,7,8即可。对于...原创 2018-12-29 16:20:54 · 149 阅读 · 0 评论 -
剑指offer:重建二叉树(C++)
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。代码:#include <iostream>#include <stdlib.h>#include <string&...原创 2018-12-03 16:39:38 · 424 阅读 · 1 评论 -
reverse函数:反转容器内容
reverse函数可以反转一个容器中的内容,包含在<algorithm>库中。1、函数原型reverse函数等同于下面的代码:template <class BidirectionalIterator> void reverse (BidirectionalIterator first, BidirectionalIterator last){ while...转载 2018-12-03 16:18:38 · 601 阅读 · 0 评论 -
C++中vector的用法解析(2)
一、向量的介绍向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。在使用它时, 需要包含头文件 vector, #include<vector>vector 容器与数组...转载 2018-12-03 16:16:02 · 342 阅读 · 0 评论 -
C++用指向函数的指针作为函数参数
示例:#include <iostream>using namespace std;int add(int x, int y){ return x + y;}int sub(int x, int y){ return x - y;}int operation(int x, int y, int(*function)(int, int)){ return func...原创 2018-12-05 19:42:12 · 4487 阅读 · 0 评论 -
C++中指向指针的指针的作用
1 前言C++中一个指针的使用就已经让很多人欲哭无泪,可是更不幸的是他还有指向指针的指针。指向指针的指针有时候还是非常有用的,我们这节就来介绍一下,指向指针的指针有什么妙用。2 作用1:在子函数中修改主函数传过来的指针的指向这是一个最常见的应用,比如:比如主函数申明一个指针变量,且不为其分配指向空间(只是指向NULL),然后取该指针变量的地址传参给子函数;在子函数里根据需要申请一片空间...转载 2018-12-03 15:58:35 · 11183 阅读 · 2 评论 -
C++使用组合对象时拷贝构造函数的定义
前言C++中拷贝构造函数的深拷贝和浅拷贝是一个很重要的问题,在使用组合时,我们应该自定义拷贝构造函数,实现深拷贝。下面是一个实现组合对象的深拷贝的例子。问题描述读取&quot;score.txt&quot;,将其中的人名全部进行加密处理,并计算平均分,最后写入另一个文件scored.txt;例如://score.txt //scored.txt姓名,年龄,成绩 ...原创 2018-11-30 21:42:37 · 1061 阅读 · 1 评论 -
C中的qsort函数和C++中的sort函数的理解与使用
一、qsort()函数原型:_CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*));参数解释:1、待排序数组首地址;2、数组中待排序元素数量;3、各元素的占用空间的大小;4、指向函数的指针,用于确定排序的顺序。说明:qsort函数是ANSI C标准中提供的,其声明在stdl...转载 2018-11-19 17:10:38 · 697 阅读 · 0 评论 -
C++中String类的字符串分割实现
最近笔试,经常遇到需要对字符串进行快速分割的情景,主要是在处理输入的时候,而以前练习算法题或笔试,很多时候不用花啥时间考虑测试用例输入的问题。可是C++标准库里面没有像java的String类中提供的字符分割函数split ,着实不方便。那么怎么解决这个问题呢?整理了一些方法如下:1.简洁高效的方法(不过只能包含一个分隔符):#include <vector>#include &...转载 2018-11-04 15:34:38 · 1764 阅读 · 0 评论 -
C++中string substr函数的使用方法
substr函数的形式为s.substr(pos, n),需要两个参数,第一个是开始位置,第二个是获取子串的长度。函数可以从一个字符串中获取子串,返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s),可以作为一种构造string的方法。若pos的值超过了string的大小,则substr函数会抛...转载 2018-11-03 15:48:36 · 51585 阅读 · 0 评论 -
C++ string中的find()函数
1.string中find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回一个特别的标记npos。(返回值可以看成是一个int型的数)#include<cstring>#include<cstdio>#include<iostream>using namespace std;int main(){ ////find函数返回...转载 2018-11-03 15:34:00 · 21298 阅读 · 0 评论 -
C++中string append函数的使用与字符串拼接
常用的函数原型: basic_string &amp;amp;append( const basic_string &amp;amp;str ); basic_string &amp;amp;append( const char *str ); basic_string &amp;amp;append( const basic_string &amp;amp;str, size_type index, size转载 2018-11-03 15:10:16 · 84299 阅读 · 2 评论 -
C++中string erase函数的使用
erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );也就是说有三种用法:(1)erase(pos,n); 删除从po...转载 2018-11-03 14:23:59 · 1121 阅读 · 0 评论 -
visual studio 2013创建动态c++ dll并调用
创建动态dll库1、打开visual studio 创建一个控制台应用程序。 2、选择DLL,空项目。 3、点击源文件,创建一个main.c文件 4、在main.c中写入一个简单的函数,内容如下: 5、选择项目,鼠标右键,选择生成,即可编译生成dll。 6、在项目的目录有dll和lib两个生成好的文件。 在别的项目中使用生成的dll1、新建一个c的控制台...转载 2018-06-06 09:51:13 · 3242 阅读 · 0 评论 -
C++中memset()函数
前段项目中发现一个问题,程序总是在某个dynamic_cast进行动态转换时出异常,查了半天才发现问题原来是出在memset的使用上,虽然问题本身显而易见,但当处于几十万行代码量级中时,就变得不太那么容易定位了。本文归纳了下使用memset几个需要注意的地方,虽然内容很简单,但也希望对大家有所帮助。所在的头文件在C++中:<cstring>,在C中<string.h>...转载 2019-01-07 13:05:22 · 555 阅读 · 0 评论 -
c++中的sizeof()运算符
1 定义sizeof是一个操作符(operator)。其作用是返回一个对象或类型所占的内存字节数。2 用法sizeof有三种语法形式:1) sizeof (object); //sizeof (对象)2) sizeof object; //sizeof 对象3) sizeof (type_name); //sizeof (类型)对象可以是各种类型的变量,以及表达式(一...转载 2019-01-07 12:56:30 · 1854 阅读 · 0 评论 -
C++之stack容器使用
c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO)使用该容器时需要包含#include头文件;定义stack对象的示例代码如下:stack<int>s1;stack<string>s2;stack的基本操作有:1.入栈:如s.push(x);2.出栈:如 s.pop().注意:出栈操作只是删除栈顶的元素,并不返回该元素。3...转载 2019-01-07 13:08:07 · 335 阅读 · 0 评论 -
C++多态的实现及其原理
多态的概念C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象类型是派生类,就调用派生类的函数;如果对象类型是基类,就调用基类的函数1:用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2:存在虚函数的类都有一个一维的虚函数表叫做虚表,类的对象有一个指向虚表开始的虚指针。虚表是...转载 2019-03-16 11:45:29 · 208 阅读 · 0 评论 -
C++指针的引用*&
指针的引用0 前言1 指针的指针和指针的引用2 例子0 前言今天刷leetcode的时候,看到了一个人在函数的形参中使用了这样的一个参数 TreeNode*& prev,我当时就蒙了,这是什么操作,怎么之前从来没有见过。后来学习了一下,发现这是指针的引用还是很好理解的,在此做记录。1 指针的指针和指针的引用我们知道在C++中指针也是一种变量类型,其中存储的是地址。我们知道C++中...原创 2019-05-22 23:01:32 · 4922 阅读 · 0 评论 -
C++内存分配的方式
C++内存分配的方式有三种:分别是从静态存储区分配,从栈上分配内存和从堆上分配内存。从静态存储区分配内存从静态存储区域分配的内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。静态分配的区域的生命期是整个软件运行期,就是说从软件运行开始到软件终止退出。只有软件终止运行后,这块内存才会被系统回收。从栈上分配内存在执行函数时,函数内局部变量的存...转载 2019-05-22 22:24:36 · 8542 阅读 · 0 评论 -
C++ STL之Map按Key排序和按Value排序
Map按Key排序和按Value排序0 前言1 C++ STL中Map的按Key排序2 C++ STL中Map的按Value排序3 总结0 前言map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value。假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择。 我们这样定义,map<...转载 2019-05-09 11:06:36 · 735 阅读 · 0 评论 -
C++中类中常规变量、const、static、static const(const static)成员变量的声明和初始化
C++类有几种类型的数据成员:普通类型、常量(const)、静态(static)、静态常量(static const)。这里分别探讨以下他们在C++11之前和之后的初始化方式。1 c++11之前版本的初始化在C++11之前常规的数据成员变量只能在构造函数里和初始化列表里进行初始化。const类型的成员变量只能在初始化列表里并且必须在这里进行初始化。static类型只能在类外进行初始化。stat...转载 2019-04-24 21:27:57 · 1744 阅读 · 2 评论 -
C++私有构造函数的使用
很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么? 当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在...转载 2019-04-24 21:21:40 · 4566 阅读 · 0 评论 -
单例模式及C++实现
单例模式及C++实现1 教科书里的单例模式2 懒汉与饿汉3 线程安全的懒汉实现4 饿汉实现1 教科书里的单例模式我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码:class singl...转载 2019-04-24 21:16:45 · 386 阅读 · 0 评论 -
C++空类与类的大小
空类的默认成员如果定义一个空类,没有任何内容,如:class Empty{}如果你只是声明一个空类,不做任何事情的话,编译器会自动为你生成一个默认构造函数、一个拷贝默认构造函数、一个默认拷贝赋值操作符、一个默认析构函数、取址运算符和一个取址运算符const。这些函数只有在第一次被调用时,才会别编译器创建。所有这些函数都是inline和public的。class Empty{pub...转载 2019-04-13 09:54:48 · 2833 阅读 · 1 评论 -
C++数组的定义和初始化
1 一维数组静态 int array[100]; 定义了数组array,并未对数组进行初始化静态 int array[100] = {1,2}; 定义并初始化了数组array动态 int* array = new int[100]; delete []array; 分配了长度为100的数组array动态 int* array = new int[100](1,2); delet...转载 2019-04-02 15:39:37 · 10832 阅读 · 0 评论 -
C++ map和unordered_map的差别和使用
还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/78065438需要引入的头文件不同map: #include < map >unordered_map: #include < unordered_map >内部实现机理不同map: map内部实现了一个...转载 2019-04-07 18:47:52 · 238 阅读 · 0 评论 -
C++的智能指针
1.智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。理解智能指针需要从下面三个层次:从较浅的层面看...转载 2019-03-18 17:44:00 · 460 阅读 · 0 评论 -
C++面试问题总结
1. 请用简单的语言告诉我C++ 是什么?C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!2. C和C++的区别C是面向过程的语言,是一个结构化的语言,考虑如何通过一个过程对输入进行处理得...转载 2019-03-18 15:58:53 · 3803 阅读 · 0 评论 -
C++的explicit关键字详解
前言首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).详解那么显示声明的构造函数和隐式声明的有什么区别呢? 我们来看下面的例子:class CxString // 没有使用explicit关键字的...转载 2019-03-21 11:29:58 · 184 阅读 · 0 评论 -
指定C++ vector、二维vector的大小及resize与reserve的区别
前言vector是一个动态的数组,我们最常使用push_back()向vector中添加元素。但是有时候我们希望在vector创建之后就按照下标来访问vector中的元素,如果直接v[i]是会报错的,因为此时vector的size是0,其中还没有元素。如何初始化vector到我们想要的大小呢。这就需要用到vector的resizeh函数了。resize首先看resize的函数原型void ...原创 2019-03-20 16:40:00 · 35734 阅读 · 1 评论 -
C++ int与string/char*互转
1 前言其实在源代码中int本身也要用一串字符表示,前后没有双引号,告诉编译器把它当作一个数解释。缺省情况下,是当成10进制(dec)来解释,如果想用8进制,16进制,怎么办?加上前缀,告诉编译器按照不同进制去解释。8进制(oct)—前缀加0,16进制(hex)—前缀加0x或者0X。string前后加上双引号,告诉编译器把它当成一串字符来解释。2 int转化为string或者char*2.1...转载 2019-01-12 23:06:30 · 2309 阅读 · 0 评论 -
C++之queue容器使用
queue 模板类的定义在<queue>头文件中。与stack 模板类很相似,queue 模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。定义queue 对象的示例代码如下:queue<int> q1;queue<double> q2;queue 的基本操作有:入队,如例:q.p...转载 2019-01-07 13:11:03 · 1512 阅读 · 0 评论 -
C++ __int64用法
在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。转载 2016-03-18 21:27:24 · 14851 阅读 · 2 评论 -
c++截取字符串
C++的string类提供了大量的字符串操作函数,提取字符串的一部分,可采用substr函数实现原创 2016-03-09 20:21:57 · 61256 阅读 · 5 评论 -
C++中的日期和时间time_t与struct_tm
本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。关键字:UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元)转载 2016-06-13 16:05:41 · 3906 阅读 · 0 评论