自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

转载 内存分布模型

如上图,从低地址到高地址,一个程序由代码段、数据段、BSS段、堆栈段组成。 代码段:存放程序执行代码的一块内存区域。只读,不允许修改,代码段的头部还会包含一些只读的常量,如字符串常量字面值(注意:const变量虽然属于常量,但是本质还是变量,不存储于代码段)。 数据段data:存放程序中已初始化的全局变量和静态变量的一块内存区域。 BSS段:存放程序中未初始化的全局变量和静态变量的一块内存区域。 可执行程序在运行时又会多出两个区域:堆区和栈区。 堆区:动态申...

2022-05-06 16:57:54 250

原创 vector的核心框架接口的模拟实现

#include<iostream>#include<assert.h>using namespace std;template<class T>class vector {public: typedef T* iterator; typedef const T* const_iterator; iterator begin() { return _start; } iterator end() { return _endofstorage; } c.

2022-04-27 15:08:37 193

原创 c++ 使用栈模拟队列

class MyQueue {public: stack<int> stIn; stack<int> stOut; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { stIn.push(x); } /.

2022-04-21 12:16:08 1012

原创 c++笔记 STL标准模板库 算法3

一、算术生成算法1.accumulate算法 计算容器元素累计总和void test(){ vector<int> v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); int sum = accumulate(v1.begin(), v1.end(), 1000); cout << "sum = " << sum << e

2022-04-08 12:10:08 128

原创 c++笔记 STL标准模板库 算法2

一、常用的遍历算法1.for_each:遍历容器元素2. transform算法 将指定容器区间元素搬运到另一容器中int myTransway(int val){ return val;}class MyTransInt{public: int operator()(int val) { return val; }};void test(){ vector<int> v1; v1.push_back(10); v1.push_..

2022-04-07 13:23:53 1046

原创 c++ 笔记 STL标准模板库 算法

一、谓词谓词是指普通函数或重载的 operator()返回值是 bool 类型的函数对象(仿函数)。如果 operator 接受一个参数,那么叫做一元谓词,如果接受两个参数,那么叫做二元谓词,谓词可作为一个判断式class GreaterThenFive{public:bool operator()(int num){return num > 5;}};//一元谓词void test01(){vector<int> v;for (int i = 0;

2022-04-06 20:26:35 81

原创 c++笔记 容器 map

一、map容器的特点1、所有元素都会根据元素的键值自动排序2、所有的元素都是pair,同时拥有键值和实值。 第一个参数:键值 第二个参数:实值3、map容器的键值唯一 不可变 实值 可变。二、map容器的插入、遍历void test(){ /* map/multimap常用API map构造函数 map<T1, T2> mapTT;//map默认构造函数: map(const map &mp);//拷贝构造函数 map赋值操作 map&am.

2022-04-05 18:50:39 1130

原创 c++笔记 容器 set

一、set容器Set 的特性是。所有元素都会根据元素的键值自动被排序。Set 的元素不像 map 那 样可以同时拥有实值和键值,set 的元素即是键值又是实值。Set 不允许两个元素 有相同的键值。 我们可以通过 set 的迭代器改变 set 元素的值吗?不行,因为 set 元素值就是其键值,关系到 set 元素的排序规则。如果任意改变 set 元素值,会严 重破坏 set 组织。换句话说,set 的 iterator 是一种 const_iterator. set 拥有和 list 某些相同的性质,当

2022-04-02 10:26:19 2195

原创 c++ 容器 List、set

一、list存放自定义数据 如果删除某个节点 必 须重载 ==运算符 list容器 对自定义数据排序 重载<运算符class Person{public: string m_name; int m_age; Person(string name, int age):m_age(age), m_name(name){} bool operator< (const Person& t) { return this->m_age < t....

2022-03-31 11:57:04 1798

原创 c++笔记 容器 stack、queue、list

一、stack容器 栈容器先进后出的数据结构。push入栈、pop出栈、top永远指向栈顶元素stack没有迭代器void test(){ /* stack构造函数 stack<T> stkT;//stack采用模板类实现, stack对象的默认构造形式: stack(const stack &stk);//拷贝构造函数 stack赋值操作 stack& operator=(const stack &stk);//重载.

2022-03-30 15:30:33 317

原创 c++笔记 容器 deque

Vector 容器是单向开口的连续内存空间,deque 则是一种双向开口的连续线性空 间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector 容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque 容器和 vector 容器最大的差异,一在于 deque 允许使用常数项时间对头端进行元素的插入和删除操作。二在于 deque 没有容量的概念,因为它是动态的以分段连续空间组合而成,随时可以增加一段新的空间并链接起来,换句话说,像vector 那

2022-03-30 09:59:43 222

原创 c++笔记 容器vector

vector 的数据安排以及操作方式,与 array 非常相似,两者的唯一差别在于空间的运用的灵活性。Array 是静态空间,一旦配置了就不能改变,要换大一点或者小一 点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector 是动态空间,随着元素的加入,它 的内部机制会自动扩充空间以容纳新元素。因此 vector 的运用对于内存的合理利用与运用的灵活性有很大的帮助,我们再也不必害怕空间不足而一开始就要求一个 大块头的array了。 Vector

2022-03-29 19:07:43 849

原创 c++笔记 STL标准模板库 String

二、STL 基本概念STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的 统 称。现在主要出现在 c++中,但是在引入 c++之前该技术已经存在很长时间 了。 STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器 和算法之间通过迭代器进行无缝连接。STL 几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。 STL(Standard Templ

2022-03-28 20:54:16 763

原创 c++笔记 异常

一、C语言传统的处理错误的方式 传统的错误处理机制:1. 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 2. 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码 放到errno中,表示错误 3. C 标准库中setjmp和longjmp组合。这个不是很常用,了解一下 实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错误。int myDiv(int a,int b) { if(

2022-03-28 12:47:49 69

原创 c++ 笔记 类型转换

类型转换(cast)是将一种数据类型转换成另一种数据类型。例如,如果将一个整型 值赋给一个浮点类型的变量,编译器会暗地里将其转换成浮点类型。 转换是非常 有用的,但是它也会带来一些问题,比如在转换指针时,我们很可能将其转换成一 个比它更大的类型,但这可能会破坏其他的数据。 应该小心类型转换,因为转换 也就相当于对编译器说:忘记类型检查,把它看做其他的类型。 一般情况下,尽 量少的去使用类型转换,除非用来解决非常特殊的问题。 无论什么原因,任何一个程序如果使用很多类型转换都值得怀疑. 标准 c++提供了一个显

2022-03-27 17:18:12 56

原创 c++笔记 函数模板

一、模板概论c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函 数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表。这个通用函数 就成为函数模板。凡是函数体相同的函数都可以用这个模板代替,不必定义多个函 数,只需在模板中定义一次即可。在调用函数时系统会根据实参的类型来取代模板 中的虚拟类型,从而实现不同函数的功能。 c++提供两种模板机制:函数模板和类 模板 类属 - 类型参数化,又称参数模板 总结: 模板把函数或类要处理的数据类型 参数化,表现为参

2022-03-27 13:33:55 1390

转载 c++笔记 减少类的临时对象生成

我们知道在C++的创建对象是一个费时,费空间的一个操作。有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了。通常以下三种情况会产生临时对象: 1,以值的方式给函数传参; 2,类型转换; 3,函数需要返回一个对象时;现在我们依次看这三种情况:一,以值的方式给函数传参。 我们知道给函数传参有两种方式。1,按值传递;2,按引用传递。按值传递时,首先将需要传给函数的参数,调用拷贝构造函数创建一个副本,所有在函数里的操作都是针对这个副本的,也正是因为这个原因,...

2022-03-26 16:51:43 127

原创 c++笔记 继承

一、父类和子类的同名成员函数处理1子类继承父类所有成员函数和成员变量class Base { public: void func(void) { cout<<"父类中的void func"<<endl; } void func(int a) { cout<<"父类中的int func a = "<<a<<endl; } }; class Son:public Base { public: }; voi

2022-03-26 11:26:57 876

原创 c++ 类的继承

一、类的基本概念c++最重要的特征是代码重用,通过继承机制可以利用已有的数据类型来定义新的数据类型,新的类不仅拥有旧类的成员,还拥有新定义的成员。 一个 B 类继承于A类,或称从类 A 派生类 B。这样的话,类 A 成为基类(父类), 类B成为派生 类(子类)。 派生类中的成员,包含两大部分: 一类是从基类继承过来的,一类是自己增加的成员。 从基类继承过过来的表现其共性,而新增的成员体现了其个性。继承的优点:减少代码的冗余 提高代码的重用性二、继承的格式派生类定义格式:Class 派生类

2022-03-24 13:33:22 8476

原创 c++ 实现String类

#include<iostream>#include<string.h>using namespace std;class String {public: String(const char* str) { this->mstr = new char[strlen(str) + 1]; strcpy_s(this->mstr, strlen(str) + 1, str); this->m_size = strlen(mstr); cout.

2022-03-23 20:06:36 1531

原创 c++类的练习 封装tv遥控器、智能指针的类

一、tv遥控器的模拟#include<iostream>using namespace std;class TV { friend class Remote;public: enum {on, off}; enum{minvolume, maxvolume = 50}; enum{minchannel, maxchannel = 150}; TV() { mstate = 0; volume = 0; channel = 0; } void turntv(

2022-03-22 22:07:25 670

原创 c++笔记 用new和delete从栈区申请空间、静态成员

一、new与delete和malloc、calloc、realloc比较1.malloc等返回一个void指针,c++不允许将void赋值给其他任何指针,必须强转。1.2、malloc等可能申请内存失败,所以必须判断返回值来确保内存分配成功。1.3、malloc等不会调用构造函数。free 不会调用析构函数(重要)二、C++中解决动态内存分配的方案是把创建一个对象所需要的操作都结合在一个称为 new 的运算符里。当用 new 创建一个对象时,它就在堆里为对象分配内存并调用 构造函数完成初

2022-03-21 20:05:55 1115

原创 c++ 类的深浅拷贝

浅拷贝:同一类型的对象之间可以赋值,使得两个对象的成员变量的值相同,两个对象仍然 是独立的两个对象,这种情况被称为浅拷贝. 一般情况下,浅拷贝没有任何副作 用,但是当类中有指针,并且指针指向动态分配的内存空间,析构函数做了动态内 存释放的处理,会导致内存问题。d#include<iostream>#include <cstring>using namespace std;class Person{private: char *m_name; int m

2022-03-20 22:28:16 227

原创 c++笔记 c/c++中的const

c中的const常量的引进是在 c++早期版本中,当时标准 C 规范正在制定。那时,尽管 C 委员 会决定在 C 中引入 const,但是,他们 c 中的 const 理解为”一个不能改变的普通变量”,也就是认为 const 应该是一个只读变量,既然是变量那么就会给 const 分配 内存,并且在 c 中 const 是一个只读变量,c 语言中 const 修饰的只读变量是 外部连接的。 如果这么写:const int arrSize = 10;int arr[arrSize];看似是一件合

2022-03-19 13:05:45 712

原创 Linux笔记(四)、用户登陆和注销

一、用户登陆和注销root权限中使用logout退出root,进入普通用户,再次logout退出登陆终端中无法使用logout,只能使用exit二、用户管理

2022-03-17 21:04:58 1486

原创 np.minimum()用法、广播机制

今天在看到计算IOU函数代码中的np.minimum时,不是很了解,寻找了资料def wh_iou(wh1, wh2): # Returns the nxm IoU matrix. wh1 is nx2, wh2 is mx2 wh1 = wh1[:, None] # [N,1,2] wh2 = wh2[None] # [1,M,2] inter = np.minimum(wh1, wh2).prod(2) # [N,M] return inter / (

2022-03-11 15:28:02 5273

原创 Linux笔记(三)vi常用模式、各种模式的相互转换、关机重启操作

一、vi、vim常用的三种模式登陆Xshell,输入命令按下i进入插入模式输入代码按下esc键 进入命令行模式输入:w(write)q(quit) 写入并退出,当再次编辑时 写下同样命令即可再次编辑(vi Hello.java)二、各种模式的互相切换快捷键三、关机重启在关机或者重启前先执行sync操作。...

2022-03-08 19:37:41 817

原创 Linux笔记(二)目录结构、xshell、xftp

一、Linux目录结构Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录”/“,然后再此目录下再创建其他目录。在Linux中,一切设备皆文件在其中一切硬件都当做文件来对待二、目录结构详解bin文件下存放经常使用的命令,例如cd,co等/home存放用户的主目录,下属文件夹以用户名命名在终端输入添加用户指令后,产生了新的用户删掉后用户不存在/lost一般为隐藏文件夹 在通过命令cd / 进入根目录后 使用/l...

2022-03-07 20:40:16 981

原创 Linux笔记(一)虚拟机快照、虚拟机迁移和删除

一、虚拟机快照:1.新建快照A,然后创建新文件夹2.创建快照B,再次创建文件夹3.右键虚拟机,快照管理机4.转到快照A,回到初始位置。5.到达初始位置时,可以再次回到快照B位置再次创建文件夹 ,管理快照。二、虚拟机迁移和删除 虚拟系统安装好了,他的本质是文件。因此虚拟系统迁移很方便,你可以把安装好的虚拟系统这个文件夹整体拷贝或者剪切到另外的位置使用,删除用vmware进行移除,再点击菜单,从磁盘删除,或者直接手动删除虚拟系统对应的...

2022-03-02 21:54:20 1633

原创 c&c++内存管理

用_alloca申请的空间是再栈区申请的,不需要手动释放空间void main(){ //c int* ptr = (int*)malloc(sizeof(int) * 10); if (NULL!= ptr) { cout << "out of memory" << endl; return; } free(ptr); //c++ int* ptr1 = new int[10]; delete[]ptr1;}c和c++中动态申请...

2021-12-16 15:25:53 1842

原创 c++笔记 类 static、初始化顺序

一.声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化class Test {private: int m_data; static int m_value;};int Test:: m_value = 0;特性1. 静态成员为所有类对象所共享,不属于某个具体的实例2. 静态成员变量必须在类外定义,定义时不添加static关键字3....

2021-12-13 15:57:11 1141

原创 c++笔记 类 友元函数,输入输出运算符重载

声明友元函数可以访问类中的私有成员

2021-12-13 11:27:54 1256

原创 c++笔记 类 运算符重载

class Test{public: Test(int a = 10) { m_data = a; } Test(const Test& t) { m_data = t.m_data; } Test operator&=(const Test& t) { if (this != &t) { m_data = t.m_data; } } void showdata() { cout << m_data &..

2021-12-10 16:18:10 4407

原创 c++ 初阶笔记 类

1.在实例化对象时进行开辟空间,有了空间才可以对其进行操作。2.如何计算类的大小:类的成员大小的字节,并会对其进行补齐在上图中共有24个字节。在类中加入成员函数不会对类的大小产生影响。类的大小只与成员函数有关。3. 类是如何存储的?在类中每个成员都会各自存储一份,函数并没有存储在类中,而是放入公共区域,各个类可以共同调用。每个对象各自保存数据空间,代码各自保存,保存数据和保存代码的空间并不是一个空间。如上图所示,假如一个类没有成员变量,只有成员函数,.

2021-12-06 22:22:18 52

原创 c++初阶 c++与c语言的小区别 c++对函数重载的改写 12_05

1.在vc6.0中,所有定义变量语句需要放在赋值语句前进行。在vs编译器中没有这个限制。在c语言中定义需要在循环外定义c++中使用就近原则,使用时定义。2.c语言中的输入输出格式:c++中不需要管变量的格式3.c和c++中函数的区别c语言中不支持函数的重载,上述代码无法成功运行。c++支持函数的重载,可以根据给定函数参数的类型选取调用的具体函数。函数的重载可以靠参数列表区分,不能靠返回值的不同进行区分。重载函数的底层:...

2021-12-05 20:23:06 66

原创 python enumerate()函数:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。语法以下是 enumerate() 方法的语法:参数返回值返回 enumerate(枚举) 对象。实例以下展示了使用 enumerate() 方法的实例:...

2021-12-01 15:36:04 240

原创 c++ const关键词的用法

今天学习c++时发现对const这个关键词了解不是很全面,在网上查阅资料后记录在博客中。const 是 constant 的缩写,本意是不变的,不易改变的意思。在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数。C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。一、const修饰普通类型的变量a 被定义为一个常量,并且可以

2021-11-25 21:29:53 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除