C++
文章平均质量分 87
编程鸟
编程使我快乐,编程使我富裕,编程使我幸福!我爱编程!
展开
-
STL string容器用法
1 String概念string是C++标准库的一个重要的部分,主要用于字符处理。C++的算法库对string类也有着很好的支持,并且string类还和C语言的字符串之间有着良好的接口。2 String和char的比较string是一个类,char是一个指向字符的指针。string封装了char*,管理这个字符串是一个char*型的容器。string不用考虑内存释放和越界。string管理char所分配的内存。每一次string的复制,取值都由string类负责维护,不用担心复制越界和取值越界等。st原创 2021-12-12 12:52:09 · 1507 阅读 · 0 评论 -
仿函数
函数对象function objects,又名仿函数,一种行为类似函数的对象,调用者可以向函数一样使用该对象,其实现起来也比较简单:用户只需要实现一种新类型,在类中重载operator()即可,参数根据用户所要进行的操作选择匹配。如下所示:class FunctionObjectType { public: void operator() { statements...原创 2019-11-24 17:01:41 · 439 阅读 · 0 评论 -
iterator
1、迭代器的概念迭代器(iterator)是一种抽象的设计概念,是设计模式的一种,其定义如下:提供一种方法,使之能够依次寻访某个容器所包含的所有元素,而又无需暴露该容器底层的结构。2、迭代器的本质迭代器实际是一种行为类似指针的对象,因此指针的所有操作迭代器都支持,使用迭代器时向使用指针一样去使用。比如:指针的解引用、成员访问、前置/后置++、前置/后置–、==、!=等迭代器支持,但是迭代器是...原创 2019-11-22 23:14:48 · 1877 阅读 · 0 评论 -
multimap
1、multimap的概念multimap和map的唯一差别就是map中的key必须是唯一的,而multimap中的key是可以重复的,其底层结构及方法接口与map完全相同。2、multimap的基本操作使用map时,必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。...原创 2019-11-20 22:24:39 · 1470 阅读 · 0 评论 -
map
1、map简介(1)map的特性map的所有元素都会根据元素的键值自动排序。map的所有元素都是pair,同时拥有实值(value)和键值(key)。pair的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值,底层机制由红黑树实现。(2)map的性质当客户端对它进行元素新增操作或删除操作时,操作之前的所有迭代器,在操作完成之后都依然有效。2、map的基本操作使...原创 2019-11-20 22:05:19 · 1616 阅读 · 0 评论 -
unordered_map
1、multimap的概念multimap和map的唯一差别就是map中的key必须是唯一的,而multimap中的key是可以重复的,其底层结构及方法接口与map完全相同。2、multimap的基本操作使用map时,必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。...原创 2019-11-20 21:36:26 · 1976 阅读 · 0 评论 -
STL中的multiset
1、基本概念multiset与set唯一的不同就是:multiset中的元素可以重复,而set不可以重复。2、multiset的操作使用multiset时必须包含头文件以及std标准命名空间。(1)insert():插入数据。(2)erase():删除数据。(3)find():查找数据。(4)clear():数据的清空。(5)empty():数据的判空。(6)size():获取有...原创 2019-11-14 23:44:24 · 355 阅读 · 0 评论 -
STL中的set
1、set的基本概念set与map相同的是:底层均采用红黑树,因此所有元素都会根据元素的键值自动排序,与map不同的是:map中存放真正的键值对<key,value>,而set中的value就是key,key就是value,虽然set提供给用户的接口只存放value,而实际底层真正存放的是<value, value>的键值对,即set中key就是value,value就...原创 2019-11-14 23:38:21 · 363 阅读 · 0 评论 -
STL中的priority_queue
1、priority_queue概述(1)priority_queue是一个拥有权值观念的queue,它允许加入新元素、移除旧元素、审视元素值等功能。因为这是一个queue,所以只允许再底端加入元素,并从顶端取出元素。(2)priority_queue带有权值观念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列。权值最高者排在最前面。(3)缺省情况下priority_queu...原创 2019-10-24 15:45:23 · 401 阅读 · 0 评论 -
STL中的queue
1、queue概述queue是一种先进先出的数据结构。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,但是没有迭代器,不允许遍历。将元素推入queue得操作称为push,将元素推出queue得操作称为pop。如下图所示:2、queue的定义deque是双向开口的数据结构,以deque为底部结构并封闭其底部的出口和前端的入口,就能形成queue。以某种既有容器为底部结构,...原创 2019-10-23 22:38:59 · 326 阅读 · 0 评论 -
STL中的stack
1、stack概述stack是一种先进后出的数据结构。stack不允许有遍历行为,也不提供迭代器,只允许新增元素、移除元素、取得最顶端元素。将元素推入stack的操作称为push,将元素推出stack的操作称为pop,如下图所示。2、stack的定义deque是双向开口的数据结构,以deque为底部结构并封闭其头部端口,能形成一个stack。因此,deque是stack的默认的底部结构。以...原创 2019-10-23 22:33:19 · 1256 阅读 · 0 评论 -
STL中的heap
1、heap的概念heap(堆)就是用数组实现的二叉树,所以它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。堆的常用方法:构建优先队列、支持堆排序、快速找出一个集合中的最小值(或者最大值)。(1)heap属性1)堆属性分为两种:最大堆和最小堆。在最大堆中,父节点的值比每一个节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。2)heap没有迭...原创 2019-10-23 21:46:41 · 1395 阅读 · 0 评论 -
STL中的list
1、list概述list的优点是每次插入或删除一个元素,就配置或释放一个元素空间,对于任何位置的元素插入或元素移除,list永远是常数时间。list迭代器是提供使用者使用list的一种接口。2、list的底层结构list的底层是一个带头结点的双向环状链表,因此在其任意位置进行数据插入和删除操作都非常方便,时间复杂度均为O(1)。其底层结构如下所示:3、list的操作(1)list的迭代...原创 2019-10-19 20:49:33 · 601 阅读 · 0 评论 -
STL中的vector
1、vector概述vector的数据安排以及操作方式与array非常相似。两者的唯一差别在于空间运用的灵活性。array是静态空间,一旦配置了就不能改变。当要扩大空间时,首先要配置新空间,然后将数据转移,还要释放旧空间。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助。2、vector迭代器...原创 2019-10-16 23:14:39 · 616 阅读 · 0 评论 -
C++深浅拷贝
1、浅拷贝和深拷贝所谓浅拷贝就是由默认的拷贝构造函数所实现的对数据成员逐一赋值的方式。若类中含有指针类型的数据,这种方式只是简单地把指针指向赋值给新成员,但是并没有给新成员分配内存,因此这种方式必然会导致错误。为了解决浅拷贝出现地错误,必须显示地定义一个拷贝构造函数,使之不但能复制数据成员,而且为对象分配内存空间,这种方式就是深拷贝。2、浅拷贝浅拷贝也称位拷贝,即编译器只是将对象中地值采用基...原创 2019-08-28 16:04:32 · 627 阅读 · 0 评论 -
C++友元
友元分为友元函数和友元类。1、友元函数友元函数可以直接访问类的私有成员,它是定义在类外的普通函数,不属于任何类,但是需要在类的内部声明,声明时需要加friend关键字。【例】#include<iostream>#include<stdlib.h>using namespace std; class Date{ //声明友元函数 frien...原创 2019-08-22 22:56:01 · 207 阅读 · 0 评论 -
C++对象的计算
先看如下代码:#include<iostream>#include<stdlib.h> using namespace std; class Person{public: void SetPersonInfo(const char* name, const char* gender, int age) { strcpy(_na...原创 2019-08-18 10:42:56 · 1002 阅读 · 0 评论 -
C++多态
1、多态的概念(1)什么是多态?多态指:一个事物有多种形态。多态分为两类:静态多态和动态多态。函数重载和运算符重载都属于静态多态,在程序编译时系统就能决定调用的是哪一个函数。动态多态是在程序运行过程中才确定操作的对象,它是通过虚函数实现的。(2)构成多态的条件1)基类中必须包含虚函数,并且派生类一定要对基类中的虚函数进行重写。2)通过基类对象的指针或者引用调用虚函数。(3)多态的原理...原创 2019-08-12 11:28:52 · 179 阅读 · 0 评论 -
C++static成员
1、概念声明为static的类成员称为类的静态成员,用static修饰的成员变量称为静态成员变量,用static修饰的函数称为静态成员函数。2、特性(1)静态成员为所有类对象所共享,不属于某个具体的实例;(2)静态成员变量要在类外定义,定义时不加static关键字;(3)访问静态成员的方式:类名::静态成员;(4)静态成员函数没有隐藏的this指针,不能访问任何非静态成员;(5)静态...原创 2019-08-23 22:47:50 · 442 阅读 · 0 评论 -
C++函数重载
一、函数重载的概念: 通俗的讲:重载就是一个词有多种不同的含义。在C++程序中,将语义、功能相似的几个函数用同一个名字来表示,即为函数名重载。二、函数重载的作用: 1、函数重载便于记忆,提高了函数的易用性。 2、类的构造函数需要重载机制,C++规定构造函数必须与类名相同。 3、使得各种运算符能够支持对象语义,因为C++中运算符的语义都是固定的,而且就那么几个运算符,所以要想让同一个运算符同时原创 2017-07-10 17:43:05 · 5991 阅读 · 0 评论 -
C++引用
一、引用的概念: 引用不是定义一个变量,而是给一个已经定义的变量重新起一个别名。 二、引用的定义格式: 类型&引用变量名=已定义过的变量名。 如:int b = 10; int& a = b;//a是b的别名 三、引用的特点: 1)一个变量可用多个别名; 2)引用必须初始化; 3)引用只能在初始化的时候初引用一次,不能改变为再引用其他的变量。 【例】#define _CRT_SE原创 2017-07-08 21:11:43 · 3415 阅读 · 0 评论 -
C++命名空间
名字空间域是随标准C++而引入的,作用是解决全局命名冲突。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字: 【例】#define _CRT_SECURE_NO_WARNINGS 1# include &amp;amp;amp;lt;iostream&amp;amp;amp;gt;using namespace std;namespace bit1{ int n = 10;原创 2017-07-08 20:42:20 · 3523 阅读 · 0 评论 -
C++类和对象2
一、隐含的this指针 1、每个成员函数都有一个指针形参,它的名字是固定的,称为this指针,this指针是隐式的。(构造函数比较特殊,没有这个隐含this形参) 2、编译器会对成员函数进行处理,在对象调用成员函数时,对象地址做实参传递给成员函数的第一个形参this指针。 3、this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在原创 2017-07-31 16:36:21 · 3527 阅读 · 0 评论 -
C++ 动态内存管理
1、内存分配方式 (1)从静态存储区分配,如:全局变量、static变量等。 (2)在堆栈上分配,向下增长,如:局部变量、形式参数和返回值等。 (3)从堆或自由存储空间上分配,亦称为动态内存分配,如malloc函数和new运算符申请的内存(使用free和delete释放动态内存)。2、常见的内存错误及其对策 (1)错误:内存分配未成功,却使用了它。 对策:在使用内存前检查是否有效。原创 2017-07-23 00:10:45 · 3735 阅读 · 0 评论 -
面向对象特征-多态
1、多态的相关概念 多态的意思是:一个事物有多种形态。从系统实现的角度看,多态性分为两类:静态多态和动态的多态。函数的重载和运算符的重载都属于静态的多态,在程序编译时系统就能决定调用的是哪一个函数,因此静态的多态又称为编译时的多态性;动态的多态性是在程序运行过程中才动态的确定操作所针对的对象,因此又称为运行时的多态。动态的多态性是通过虚函数实现的。 2、构成多态的条件: (1)必须要使用关键字v原创 2017-08-01 18:13:20 · 3340 阅读 · 0 评论 -
C++类和对象1
一、类的概念 类是一种复杂的数据类型,它是将不同类型的数据(成员变量)和与这些数据相关的程序(成员函数)封装在一起的集合体。这与C语言中的结构体相似。 定义一个简单的类。 【例】class Person//person为类名{public://public为访问限定符 //_name、_sex和_age是成员变量 char *_name; char *_sex;原创 2017-07-25 10:56:12 · 3102 阅读 · 0 评论 -
C++中的继承
1、继承的相关概念: 继承是不修改已存在的类,而是采取这个已存在类的形式,并将代码加入其中的方法,是面向对象复用的重要手段。继承的语法是:在代码中和原来一样给出该类的名字,但是在左括号的前面加一个冒号和基类的名字(对于多重继承,要给出多个基类名,用逗号隔开)。(1)派生类将继承基类的数据和函数 【例】class A //基类(父类){public: void Func1(void)原创 2017-07-26 15:13:38 · 13222 阅读 · 1 评论 -
C++string类的实现
C++中提供了一种新的数据类型——字符串类型(string)。实际上string并不是C++的基本类型,它是在C++标准库中声明的一个字符串类,用这种数据类型可以定义对象,每一个字符串变量都是string类的一个对象。标准库类型string表示可变长的字符序列,使用string类型必须首先包含它的头文件。 作为标准库的一部分,string定义在命名空间std中。 【例】#include<str原创 2017-09-04 12:53:41 · 18740 阅读 · 7 评论 -
C++函数的高级特性
问题:在C++中建议用const、enum、inline替换#define,为什么? 答: 1)宏的优点: A、增强代码的复用性; B、提高代码的性能。 2)宏的缺点: A、不可调试; B、不检查参数类型; C、容易出错; D、无法操作类的私有数据成员。1、const修饰成员函数 在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员原创 2017-08-31 17:10:05 · 2637 阅读 · 0 评论 -
初识字符串类型
C++中提供了一种新的数据类型——字符串类型(string)。实际上string并不是C++的基本类型,它是在C++标准库中声明的一个字符串类,用这种数据类型可以定义对象,每一个字符串变量都是string类的一个对象。一、字符串类型:string 字符串类包含在头文件#include中,因此使用string时必须包含头文件#include。字符串变量必须先定义后使用,定义字符串变量要使用类名s转载 2017-09-03 10:26:14 · 2331 阅读 · 0 评论 -
引用与指针
一、引用的概念:引用不是定义一个变量,而是给一个已经定义的变量重新起一个别名。 二、引用的定义格式:类型&引用变量名=已定义过的变量名。如:int b = 10; int& a = b;//a是b的别名三、引用的特点:1)一个变量可用多个别名;2)引用必须初始化;3)引用只能在初始化的时候初引用一次,不能改变为再引用其他的变量。【例】#define _CRT原创 2018-06-04 09:11:40 · 472 阅读 · 0 评论 -
C++缺省参数
一、缺省参数的概念 缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。 【例】#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;void TestFunc(int a = 0){ c...原创 2018-07-23 13:00:06 · 4479 阅读 · 0 评论 -
类的默认成员函数
类默认生成的成员函数有六个,它们分别是:构造函数、拷贝构造函数、析构函数、赋值操作符重载、取地址操作符重载和const修饰的取地址操作符重载。一、构造函数 1、什么是构造函数? 初始化对象,有且仅在定义一个对象时自动执行一次的函数,就称为构造函数。据悉:类的数据成员是不能在声明类的时候初始化的,因为类并不是一个实体,而是一种抽象的数据类型,并不占据存储空间。2、构造函数的特性 (1)...原创 2018-07-31 01:37:26 · 7848 阅读 · 3 评论 -
C++内联函数
1、概念以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内敛函数的地方展开代码。因为没有函数压栈的开销,所以内联函数可以提升程序运行的效率。2、特性(1)inline是一种以空间换时间的做法,省去调用函数开销。(2) inline对于编译器而言只是一个建议,编译器会自动优化。如果定义为inline的函数体内有循环、递归,或者代码很长,编译器优化时会忽略掉内联的性质。说明:...原创 2019-08-14 11:36:02 · 705 阅读 · 0 评论 -
C++实现一个复数类
复数类的实现中包含了众多C++的基础知识,对学习C++有很大的帮助。其中,运算符重载中的“前置++、–和后置++、–”稍微难些,需注意理解它的参数设计和返回值。#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>using namespace std;class Complex{private: double _real; do原创 2017-07-18 12:32:58 · 4895 阅读 · 0 评论