
C++
文章平均质量分 92
Orange Wu
哈~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++基础——局部静态变量Static
在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为0。静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变...原创 2020-02-25 19:48:59 · 7099 阅读 · 0 评论 -
C++提高——STL中常用的遍历算法
1、for_each()for_each: 用指定函数依次对指定范围内所有元素进行迭代访问。该函数不得修改序列中的元素。void show(const int &iItem){ cout << iItem;}main(){ int iArray[] = {0,1,2,3,4}; vector<int> vecInt(iArray,iArray...原创 2019-11-16 20:03:50 · 165 阅读 · 0 评论 -
C++提高——STL中常用的集合算法
set_union: 构造一个有序序列,包含两个有序序列的并集。set_intersection: 构造一个有序序列,包含两个有序序列的交集。set_difference: 构造一个有序序列,该序列保留第一个有序序列中存在而第二个有序序列中不存在的元素。 vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_...原创 2019-11-16 19:59:01 · 242 阅读 · 0 评论 -
C++提高——STL中常用的算术和生成算法
1、accumulate()accumulate: 对指定范围内的元素求和,然后结果再加上一个由val指定的初始值。 #include<numeric> vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIn...原创 2019-11-16 19:48:34 · 174 阅读 · 0 评论 -
C++提高——STL中常用的拷贝和替换算法
1、copy() vector<int> vecIntA; vecIntA.push_back(1); vecIntA.push_back(3); vecIntA.push_back(5); vecIntA.push_back(7); vecIntA.push_back(9); vector<int> vecIntB; vecIntB.re...原创 2019-11-16 19:44:32 · 228 阅读 · 0 评论 -
C++提高——STL常用的排序算法
1、merge()以下是排序和通用算法:提供元素排序策略merge: 合并两个有序序列,存放到另一个序列。例如:vecIntA,vecIntB,vecIntC是用vector<int>声明的容器,vecIntA已包含1,3,5,7,9元素,vecIntB已包含2,4,6,8元素vecIntC.resize(9); //扩大容量merge(vecIntA.beg...原创 2019-11-15 22:54:00 · 177 阅读 · 0 评论 -
C++提高——STL中常用的查找算法
1、adjacent_find()在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器。否则返回past-the-end。 vector<int> vecInt; vecInt.push_back(1); vecInt.push_back(2); vecInt.push_back(2); vecInt.push_back(...原创 2019-11-15 22:46:33 · 158 阅读 · 0 评论 -
C++提高——STL算法中函数对象和谓词
1、函数对象和谓词定义函数对象:重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象。一个类对象,表现出一个函数的特征,就是通过“对象名+(参数列表)”的方式使用一个类对象,如果没有上下文,完全可以把它看作一个函数对待。这是通过重载类的operator()来实现的。“在标准库中,函数对象被广泛地使用以获得弹性”,标准库中的很多算法都可以...原创 2019-11-13 22:43:23 · 397 阅读 · 0 评论 -
C++提高——STL算法基础
1、算法概述算法部分主要由头文件<<<algorithm>>>,<<<numeric>>>和<<<functional>>>组成。<<<algorithm>是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制、修改、反转、排...原创 2019-10-24 21:32:09 · 181 阅读 · 0 评论 -
C++提高——容器共性机制研究
1、容器的共通能力C++模板是容器的概念。理论提高: 所有容器提供的都是值(value)语意,而非引用(reference)语意。容器执行插入元素的操作时,内部实施拷贝动作。 所以STL容器内存储的元素必须能够被拷贝(必须提供拷贝构造函数)。除了queue与stack外,每个容器都提供可返回迭代器的函数,运用返回的迭代器就可以访问元素。通常STL不会丢出异常。要求使用者确保传入正确的参...原创 2019-10-23 21:35:40 · 118 阅读 · 0 评论 -
C++提高——优先级队列priority_queue
最大值优先级队列、最小值优先级队列优先级队列适配器 STL priority_queue priority_queue<int, deque<int>> pq; priority_queue<int, vector<int>> pq; pq.empty() pq.size() pq.top() pq.pop() pq.pu...原创 2019-10-22 21:10:17 · 176 阅读 · 0 评论 -
C++提高——Deque容器
1、Deque简介deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端数组,而vector是单端的。deque在接口上和vector非常相似,在许多操作的地方可以直接替换。deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法)。deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较...原创 2019-10-22 19:40:28 · 201 阅读 · 0 评论 -
C++提高——STL(标准模板库)理论基础
1、基本概念STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。STL的从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器), 容器和算法通过迭代器可以进行无缝地连接。几乎所有的代码都采 用了模板类和模板函数的方...原创 2019-10-16 22:32:28 · 713 阅读 · 0 评论 -
C++提高——C++输入和输出流
1、I/O流的概念和流类库的结构程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。C++输入输出包含以下三个方面的内容:对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出,简称标准I/O。以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的...原创 2019-10-15 21:55:57 · 776 阅读 · 0 评论 -
C++提高——异常处理机制专题
前言1)异常是一种程序控制机制,与函数机制独立和互补 函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.2)异常设计目的:栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工...原创 2019-10-14 21:24:42 · 145 阅读 · 0 评论 -
C++提高——C++的类型转换
1 类型转换名称和语法C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)aC++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用。static_cast 静态类型转换。如int转换成charreinterpreter_cast 重新解释类型dynamic_cast 命名上理解是动态类型转换。如子类和父类之间的多...原创 2019-10-13 21:33:16 · 128 阅读 · 0 评论 -
C++提高——函数模板和类模板
前言C++提供了函数模板(function template)。所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。1)C++提供两种模板机制:函数模板...原创 2019-10-12 21:20:23 · 211 阅读 · 0 评论 -
C++基础——纯虚函数和抽象类
1、基本概念2抽象类案例#include "iostream"using namespace std;class Figure //含有纯虚函数叫抽象类{public: //约定一个统一的界面和接口,让子类使用,让子类必须去实现 virtual void getArea()=0; //纯虚函数protected:private:};class Circle...原创 2019-10-09 21:25:31 · 385 阅读 · 0 评论 -
C++基础——多态
1多态1.1问题引出函数重写在子类中定义与父类中原型相同的函数函数重写只发生在父类与子类之间#include "iostream"using namespace std;class Parent{public: Parent(int a) { this->a=a; cout<<"Parent a:"<<a<<endl; ...原创 2019-10-09 20:30:04 · 183 阅读 · 0 评论 -
C++基础——继承和派生
1. 继承概念面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础。要较好地进行面向对象程序设计,还必须了解面向对象程序设计另外两个重要特 征——继承性和多态性。本章主要介绍有关继承的知识,多态性将在后续章节中讲解。继承性是面向对象程序设计最重要的特征,...原创 2019-10-08 22:27:08 · 845 阅读 · 0 评论 -
C++基础——运算符重载
1. 概念1.1 什么是运算符重载**所谓重载,就是重新赋予新的含义。**函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整...原创 2019-10-05 17:08:31 · 420 阅读 · 0 评论 -
C++基础——友元
1. 友元函数class A1{public: A1() { a1 = 100; a2 = 200; } int getA1() { return this->a1; } //声明一个友元函数 friend void setA1(A1 *p, int a1); //这个函数是这个类的好朋友 protected:private: int a1; ...原创 2019-10-04 20:22:54 · 110 阅读 · 0 评论 -
C++基础——面向对象模型初探
前言C++对象模型可以概括为以下2部分:语言中直接支持面向对象程序设计的部分,主要涉及如构造函数、析构函数、虚函数、继承(单继承、多继承、虚继承)、多态等等。对于各种支持的底层实现机制。在c语言中,“数据”和“处理数据的操作(函数)”是分开来声明的,也就是说,语言本身并没有支持“数据和函数”之间的关联性。在c++中,通过抽象数据类型(abstract data type,ADT),在类中...原创 2019-10-04 20:17:27 · 195 阅读 · 0 评论 -
C++基础——静态成员变量成员函数
1. 静态成员变量关键字 static 可以用于说明一个类的成员,静态成员提供了一个同类对象的共享机制把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员静态成员局部于类,它不是对象成员#include "iostream"using namespace std;class BB{public: void printt...原创 2019-10-03 21:31:47 · 199 阅读 · 0 评论 -
C++基础——对象的构造和析构
创建一个对象时,常常需要作某些初始化的工作,例如对数据成员赋初值。注意,类的数据成员是不能在声明类时初始化的。C++编译器提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。3.1 构造和析构函数1. 构造函数和析构函数的概念有关构造函数1 构造函数定义及调用1)C++中的类可以定义...原创 2019-10-03 21:20:50 · 467 阅读 · 0 评论 -
C++基础——类和对象
1. 基本概念1) 类、对象、成员变量、成员函数2) 面向对象三大概念封装、继承、多态2. 类的封装1)封装(Encapsulation)A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。备注:有2层...原创 2019-10-03 19:05:31 · 175 阅读 · 0 评论 -
C++基础——函数重载
函数重载1. 概念用同一个函数名定义不同的函数当函数名和不同的参数搭配时函数的含义不同2. 判断标准函数重载至少满足下面的一个条件:参数个数不同参数类型不同参数顺序不同3. 函数返回值不是函数重载的判断标准实验1:调用情况分析;实验2:判断标准#include "iostream"using namespace std;int func(int x){ return...原创 2019-10-01 22:16:33 · 189 阅读 · 0 评论 -
C++基础——函数参数扩展
1. 默认参数C++中可以在函数声明时为参数提供一个默认值,当函数调用时没有指定这个参数的值,编译器会自动用默认值代替。 #include <iostream>using namespace std;void myPrint(int x = 3){ cout<<"x :"<<x<<endl;}//void myPrint2( ...原创 2019-10-01 19:54:04 · 243 阅读 · 0 评论 -
C++基础——内联函数
C++中的const常量可以替代宏常数定义,如:const int A = 3; #define A 3C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以避免宏的副作用!)C++中推荐使用内联函数替代宏代码片段C++中使用inline关键字声明内联函数内联函数声明时inline关键字必须和函数定义结合在一起,否则编译器会直接忽略内联请求。//宏替换和函数调用区别...原创 2019-10-01 19:42:10 · 173 阅读 · 0 评论 -
C++基础——引用
1.引用的概念a) 在C++中新增加了引用的概念b) 引用可以看作一个已定义变量的别名c) 引用的语法:Type& name = var;d) 引用做函数参数那?(引用作为函数参数声明时不进行初始化)普通引用必须要初始化2. 引用是C++的概念#include <iostream>using namespace std;void main91(){ in...原创 2019-09-28 22:55:08 · 231 阅读 · 0 评论 -
C++基础——const基本用法
C++中三目运算符可以当左值(a < b ? a : b )= 30; //返回一个最小数 并且给最小数赋值成30const的基本用法int main(){const int a;int const b;const int *c;int * const d;const int * const e ;return 0;}Int func1(const )初...原创 2019-09-28 21:01:47 · 149 阅读 · 0 评论 -
C++基础——bool类型
C++在C语言的基本类型系统之上增加了boolC++中的bool可取的值只有true和false理论上bool只占用一个字节,如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现true代表真值,编译器内部用1来表示false代表非真值,编译器内部用0来表示bool类型只有true(非0)和false(0)两个值C++编译器会在赋值时将非0值转换为true,0值...原创 2019-09-28 19:58:41 · 578 阅读 · 0 评论 -
C++基础——C++中所有的变量和函数都必须有类型
C++中所有的变量和函数都必须有类型C语言中的默认类型在C++中是不合法的在C语言中int f( );表示返回值为int,接受任意参数的函数int f(void);表示返回值为int的无参函数在C++中int f( );和int f(void)具有相同的意义,都表示返回值为int的无参函数C++更加强调类型,任意的程序元素都必须显示指明类型...原创 2019-09-28 19:50:27 · 998 阅读 · 0 评论 -
C++基础——struct类型加强
struct类型的加强:C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型C++中的struct是一个新类型的定义声明struct Student{ char name[100]; int age;};int main(int argc, char *argv[]){ Student s1 = {"wang", 1}; Stu...原创 2019-09-28 19:47:40 · 125 阅读 · 0 评论 -
C++基础——register关键字增强
register关键字 请求编译器让变量a直接放在寄存器里面,速度快1.register关键字请求“编译器”将局部变量存储于寄存器中C语言中无法取得register变量地址在C++中依然支持register关键字C++编译器有自己的优化方式,不使用register也可能做优化C++中可以取得register变量的地址2.C++编译器发现程序中需要取register变量的地址时,regi...原创 2019-09-28 19:13:21 · 339 阅读 · 0 评论 -
C++基础——命名空间using声明
有了using声明就无需专门的前缀,也能使用所需要的名字:using namespace::name位于头文件的代码不应该使用using声明所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。一 :和<iostream.h>格式不一样,前者没有后缀,实际上,在你的编译器include文件夹里面可以看到...原创 2019-09-27 22:07:41 · 500 阅读 · 0 评论 -
C++基础——程序的内存四区
1. 数据类型的本质分析数据类型的概念“类型”是数据的抽象类型相同的数据有相同的表示形式、存储格式以及相关操作程序中所有数据必定属于某一种数据类型数据类型的本质数据类型可理解为创建变量的模具 ,是固定内存大小的别名作用:编译器预算处理对象(变量)分配的内存空间大小数据类型的封装1、void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据...原创 2019-09-27 20:56:04 · 314 阅读 · 0 评论 -
SSE指令集学习
转自:https://blog.youkuaiyun.com/gengshenghong/article/details/70106151.FP Load/Store/Set使用SSE指令,首先要了解这一类用于进行初始化加载数据以及将暂存器的数据保存到内存相关的指令,我们知道,大多数SSE指令是使用的xmm0到xmm8的暂存器,那么使用之前,就需要将数据从内存加载到这些暂存器。1) load系列,用于加...转载 2019-08-20 09:58:27 · 2240 阅读 · 0 评论 -
C++指针与数组之间的关系学习
1. 内存分配int a; //分配4个字节的内存int b[10]; //分配40个字节的内存 2. b与&b的区别b与&b所代表的数据类型不一样,b代表首元素的地址,&b代表整个数组的地址。3. 数组与指针之间的转换int a[3][5];1. (a+i) ==> 表示第i行的地址,二级指针2. *(a+i) ==> 表示第i行...原创 2019-06-17 08:43:04 · 249 阅读 · 0 评论