
C/C++
C/C++学习记录
采采卷耳77
这个作者很懒,什么都没留下…
展开
-
c++选择题笔记
sizeof。原创 2023-08-17 20:09:32 · 342 阅读 · 0 评论 -
c++堆和栈
在使用 C++ 编程时,通常推荐优先使用栈上的内存,尽量避免手动管理堆上的内存,以减少内存泄漏和潜在的内存安全问题。而对于较大的对象或需要动态大小的数据结构,可以使用堆上的内存进行存储。原创 2023-08-04 14:21:31 · 141 阅读 · 0 评论 -
c++ pair
【代码】c++ pair。原创 2023-05-18 16:43:53 · 124 阅读 · 0 评论 -
c++ error笔记
【代码】c++ error笔记。原创 2023-05-16 16:45:57 · 476 阅读 · 0 评论 -
c++ string类
/删除s中位置在position,长度为length的字串。删除单个字符的话,令length为1即可。空格“ ”占一个长度。原创 2023-05-15 15:49:13 · 66 阅读 · 0 评论 -
c++ 编程笔记
会定义为一个int指针变量a和一个int变量b。×××××××××错。原创 2023-03-28 11:36:41 · 74 阅读 · 0 评论 -
c++ unordered set
un.insert(key) //返回值类型为pair :pair,如果插入成功,bool值为true,返回指向插入位置的iterator。如果插入失败(set中已有该值),bool为false,返回现有的iterator。un.count(key) //在容器中查找值为 key 的元素的个数。unordered set:(哈希set)原创 2023-03-27 10:08:50 · 199 阅读 · 0 评论 -
c++ map
m[a] //运算符[],如果map中存在key=a,那么返回(如果可value的值是基本数据类型,那么返回0,如果value的值是string,那么返回""(空字符串),也就是说基本数据类型的默认值为0,string的默认值为"")原创 2023-03-18 20:05:56 · 90 阅读 · 0 评论 -
c++ 学习笔记
A->B则A为指针,->是成员提取,A->B是提取A中的成员B,A只能是指向类、结构、联合的指针;箭头(->):左边必须为指针;A.B则A为对象或者结构体;点号(.):左边必须为实体。符号.和->的作用和区别。原创 2023-03-25 18:47:28 · 71 阅读 · 0 评论 -
c++ vector
/赋值运算符,将v1的内容复制给v。//构造函数,参数为vector的长度/容量。//返回向量v的长度(包含元素的个数)v.pushback(a);//将a插入到向量尾部。//返回地址add1到地址add2(原创 2023-03-18 20:03:52 · 107 阅读 · 0 评论 -
c++ set
返回值类型为pair :pair,如果插入成功,bool值为true,返回指向插入位置的iterator。如果插入失败(set中已有该值),bool为false,返回现有的iterator。取到iterator:s.insert(i).first。取到bool:s.insert(i).second。原创 2023-03-18 20:04:04 · 158 阅读 · 0 评论 -
C语言 字符类型
scanf()第一个参数中,空格可以代表0-无穷多个空格。使用字符进行计算,会使用ASCII表中对应的数字进行计算。char 是字符型,也是整数型。大写转小写:A+'a'-'A'小写转大写:a+'A'-'a'原创 2023-03-16 18:21:43 · 148 阅读 · 0 评论 -
c++ 流 stream
istream参数不可以const,因为流的position(当前读到的位置)有解析(parse)和格式化(format)的过程。无解析(parse)和格式化(format)的过程。返回是istream:为了连续运算。第一个参数是receiver。自定义inserter。自定义operator。原创 2023-03-16 15:08:23 · 355 阅读 · 0 评论 -
c++ STL
Basic Algorithm(sort, search, 函数模板)所有的关键字存储在 std namespace中。Containers:(类模板)Deque(可双向扩展数组)Vector(可扩展数组)Sets(无重复无序集合)List(双向链表)所有关键字首字母小写。原创 2023-03-16 15:05:54 · 73 阅读 · 0 评论 -
c++ 异常exception
有多个catch的时候,按照书写顺序,顺序执行,执行catch时会检查,是否完全匹配,是否是catch参数类型的子类(仅限引用和指针?throw的内容通常是本地变量,存储在堆栈中,在退出throw所在的程序段时并不会立即销毁,而是会被throw到向上的层级中。throw会带着throw的内容不断向上回溯并终止回溯到的每一级运行到的程序,直到回溯到try。在函数abc中,最多抛出MathErr,括号中的所有异常种类(不是一定会抛出)catch中的throw会自动将catch到的内容throw,无需参数;原创 2023-03-16 15:06:15 · 474 阅读 · 0 评论 -
c++ 内存管理
new 出来的数据 (原创 2023-03-16 15:08:02 · 118 阅读 · 0 评论 -
c++指针变量
指针变量赋初值,初值不为变量为常值,常值在系统中不像变量一样占用额外的内存,为代码段的一部分,系统会将常值在代码段中的地址传给指针,然而代码段不可以修改,当使用指针变量对常值进行修改,会报bus error。可以通过指针直接修改 变量/对象 的内容。原创 2023-03-15 11:10:24 · 118 阅读 · 0 评论 -
c++ templates
在实际应用中可能在多个cpp文件中生成相同的class of sometype(而且会同名)在swap中可以使用T来代替数据类型,在实际使用的时候T可以是任意数据类型。类的成员函数,每一个函数都是函数模板(function template)T可以用来做参数的类型,也可以做返回值类型,也可以用来做变量的声明。template的参数列表除了可以包含类,还可以包含常数表达式。在运行时,在调用函数出使用template创造一个新的函数。在实际应用中尖括号的里的内容可能会相当复杂。1.在名字前加上文件的前缀。原创 2023-03-15 20:23:25 · 269 阅读 · 0 评论 -
c++ static
全局变量,跨文件,没有固定的初始化顺序(同文件中有),如果互相之间的构造函数有依赖关系,可能会造成问题。public static(成员函数和成员变量)可以使用对象访问也可以使用类名访问。static 成员函数只可以调用参数和静态成员变量,不可以调用非静态成员变量。全局变量(对象)的析构函数调用在main()exits或exit()被调用。private只可以使用类名进行定义/初始化,不可以使用类名进行访问。全局变量(对象)的构造函数调用在程序运行的最初,在main函数之前。Java中没有全局变量。原创 2023-03-15 20:24:06 · 166 阅读 · 0 评论 -
c/c++ 字符串
(返回字符串的长度,不包括“\0”)(return length of s)只有当要对内存进行操作或要使用byte *,才使用char *尽量使用string,抛弃char *本质是字符型数组 char *库函数:c++字符串:string。库函数原创 2023-03-15 20:23:54 · 103 阅读 · 0 评论 -
c++ 运算符重载 overloading operators
运算符左边变量为对象,右边变量为其他数据类型:使用右边变量构造一个运算符需要的参数类型的对象进行运算。如果运算符需要的参数类型,没有方法能从运算符右边的变量构造一个相应类型的对象,那么就会出错。会自动对两个操作数进行可执行的类型转换并寻找符合参数类型条件的运算符定义进行运算。不使用默认的类型转换函数,自定义类型转换函数(函数名也自定义)其他所有二元的运算符定义为非成员函数(friend函数)那么T可以被转为C。运算符函数的返回值类型,考虑运算结果将会被如何使用。运算符函数的原型都是inline函数?原创 2023-03-15 20:23:32 · 178 阅读 · 0 评论 -
c++ 多态性 Polymorphism
有virtual类的对象在头部会生成一个指针vptr,指向一张表vtable,vtable中含有所有的virtual函数的地址,该表中存储的地址不是对象的,而是类的,也就是说同一个类的所有对象的内存中第一个地址的内容是相同的,都是该指针。当对某个对象进行upcasting时,如果该对象中的函数为virtual,那么将会调用该对象实际所属类的函数(子类的函数)而非父类的原始函数(运行时才能确定)virtual关键字:将子类与父类的同名函数联系起来,若无该关键字,则子类与父类的同名函数无关系。原创 2023-03-15 11:12:55 · 82 阅读 · 0 评论 -
c++ 拷贝构造
如果成员中包含指针变量、引用(reference),则这些指针和reference也会别copy,从而可能会造成变量被修改。如果没有设置拷贝构造,系统会自动创建一个拷贝构造,该拷贝构造会复制你的每一个成员变量(包括变量、对象、数组等等)。在c++中,初始化(Initialization)和赋值(assignment)是完全不同的两件事。在复制的时候,如果成员对象有拷贝构造,那么也会调用成员对象的拷贝构造,所以可能会造成递归调用。T::T(T t) 会造成死循环递归调用拷贝函数,c++编译器会报错。原创 2023-03-15 11:12:39 · 124 阅读 · 0 评论 -
c++ upcasting
把子类的对象当做父类来看待(多出来的部分当做不存在):原因在于,子类对象继承父类的全部变量和函数,而继承的这一部分在内存中在对象的堆栈底部,指针指向堆栈底部时,底部的那一部分正好对应父类的全部内容。将子类的对象当做父类来看待这一行为叫做upcasting(向上造型)原创 2023-03-15 11:11:12 · 210 阅读 · 0 评论 -
c++ 访问权限(public,protect and private)
private:只有类的成员函数可以调用,同一个类的对象可以互相访问private变量。只在编译时刻检查,运行时不检查。friend:编译时检查。原创 2023-03-14 16:13:09 · 87 阅读 · 0 评论 -
c++ inline函数
inline:内联函数,在实际运行时对程序文本进行替换而非调用。声明的时候可以无inline,定义的时候加inline。在.cpp文件中不再重复定义.h中的inline函数。需要在.h和.cpp文件中重复声明和定义?函数较小或循环使用,可做inline。inline在.h文件中使用。带inline关键字为声明。inline函数不可递归。原创 2023-03-14 16:11:38 · 164 阅读 · 0 评论 -
c++ 作用域
即使没有函数名,单纯只有大括号,大括号仍然发挥限定域的作用。大括号内声明、定义的内容,只在大括号内有效。原创 2023-03-14 16:09:36 · 138 阅读 · 0 评论 -
c++ constructor and destructor
在初始化对象数组时,数组的元素对象如果构造函数含参,在初始化时必须对每一个数组元素传参。当本地变量对象所在作用域结束时,本地变量会调用对象的析构函数析构该对象。为变量分配空间的时候不会调用对象的构造函数,运行到相应行的时候才会调用。析构函数无返回值类型且不可设置返回值类型且无参数。构造函数无返回值类型且不可设置返回值类型。原创 2023-03-14 16:09:28 · 140 阅读 · 0 评论 -
c++ new and delete
new的时候程序会生成对应的链表,存储指针地址以及变量对应的空间大小。new:运算符,后接类型,分配类型对应大小的空间,如果类型为自定义类,分配空间后调用构造函数,运算结果为地址。delete[]:回收指针对应的整个数组对应的空间大小并调用指针对应的整个数组中的每个对象的析构函数。不要用delete去释放不是new出来的空间,因为链表中没有对应项,查找不到对应的地址以及空间大小。delete:运算符,后接地址,执行过程为先析构,后回收存储空间,查找new运算时生成的链表。原创 2023-03-14 16:09:24 · 113 阅读 · 0 评论 -
c++ Initializer list
类中的所用成员变量使用Initializer进行初始化。Initializer list会早于构造函数被执行。父类的构造函数的调用也使用Initializer。Initializer内的执行顺序为声明顺序。原创 2023-03-14 16:11:11 · 112 阅读 · 0 评论 -
c++ this
所有的成员函数都有一个hidden parameter:this。this是一个指针,是其所属的函数所属的class类型的指针。当对象被定义时,this被赋值为本对象的地址。原创 2023-03-14 16:09:12 · 69 阅读 · 0 评论 -
c++ const
const char *p = "abc" 指针q所指的地址内的内容为const,不可更改,*p = "c" is error,p++ is ok。char * const q = "abc" 指针q所指的地址为const,地址内的内容const,*q = "c" is ok,q++ is error。const变量的地址不可以交给非const指针,否则const可被指针修改,该行为为error。const写在*前,地质内容为const,const写在*后,指针为const。原创 2023-03-14 15:49:59 · 76 阅读 · 0 评论 -
C++引用变量
返回值类型为引用变量的函数,返回值不可以为本地变量,因为函数结束后,本地变量的内存会被释放,返回值无意义,error。引用(reference):cant be null,必须依附于某一变量,一旦初始化后,依赖的变量对象便固定。引用变量一般需要在定义的时候初始化,函数参数和成员变量可以无需初始化,本地变量和全局比变量需要初始化。距离p最近的为*,p为指针;距离p最近的为&,p为引用。引用变量的值必须为一个有名字的变量。距离变量名最近的决定变量的基本类型。引用变量为赋值变量的别名。原创 2023-03-03 18:56:16 · 142 阅读 · 0 评论 -
C++函数
inline:内联函数,在实际运行时对程序文本进行替换而非调用。声明的时候可以无inline,定义的时候加inline。在.cpp文件中不再重复定义.h中的inline函数。带有缺省值的函数声明必须写在头文件(.h )中。需要在.h和.cpp文件中重复声明和定义?尽量不要使用default value。函数较小或循环使用,可做inline。函数参数缺省值必须从右往左依次设置。inline在.h文件中使用。带inline关键字为声明。inline函数不可递归。原创 2023-03-03 17:04:04 · 63 阅读 · 0 评论 -
c++ 继承
子类不可以直接使用父类的private部分。只可以访问public以及protected部分。子类与父类的同名函数,同名函数直接无关系。(C++独有)其他语言中构成override。构造函数调用:先父类,后子类。析构函数调用:先子类,后父类。原创 2023-03-02 17:06:44 · 60 阅读 · 0 评论 -
C++初始化
即使没有函数名,单纯只有大括号,大括号仍然发挥限定域的作用。大括号内声明、定义的内容,只在大括号内有效。原创 2023-03-01 13:04:22 · 74 阅读 · 0 评论 -
c++中的三种变量
local variables(本地变量)和parameters(函数的参数)的属性是完全一样的,在进入函数体之前不存在。class拥有函数,class的每一个对象调用class的函数,class的所有对象调用同一个函数,对象不拥有函数。class的对象调用class的函数实质:将对象的地址作为参数传给class的函数。this是一个指针,是其所属的函数所属的class类型的指针。class的不拥有变量,class的每一个对象拥有变量。2.parameters(函数的参数)1.fileds(类的成员变量)原创 2023-02-26 17:13:40 · 114 阅读 · 0 评论 -
c++:声明和定义
变量的声明:告诉编译器有这样的一个变量存在,但不为变量分配存储空间。extern关键字作用:在另一个文件中声明一个全局变量或函数。除“变量前有extern关键字且未赋初值”外,均为定义。变量的定义:为变量分配存储空间,也可以同时赋初值。变量前有extern关键字且未赋初值:为声明。变量前无extern关键字:一定是定义。原创 2023-02-26 12:59:54 · 97 阅读 · 0 评论 -
C++编译过程详解
1.编译2.汇编3.链接。原创 2023-02-26 01:23:11 · 473 阅读 · 0 评论 -
c++编程习惯
每一个class中应该有一个“.cpp”文件和一个“.h”文件。project名全小写(大写字母代表panic)class名每个单词首字母大写。原创 2023-02-25 16:20:29 · 83 阅读 · 0 评论