小成代码路的错误

文章目录

计算长度使用左闭右开的方法

getline(解决输入空格问题和给一个输入的界限)

这个函数,只有遇到换行时,才会停止;

定义:

示例:

空格问题

输入界限问题;

stoi(字符串转整形)

stoi(整型转字符串型)

reverse(反转函数)将字符串立志

静成员变量在类外初始化;但是有特例:const static int类型可以在类内初始化;而const static char类型不能在类内实现初始化;

一般的string类型中的capacity不包含'\0'

类的初始化是顺序是和声明的顺序相同的;

范围for函数;如果 在函数体内改变数组使用auto定义的变量;进行改变数组不会改变;

范围for就是刻板的拷贝

将for(auto e:s1)替换位的for(e=s1.begin;e<s1.end;e++)

这里的迭代器是固定的;所以使用时将迭代升器改变名字将无法实先for循环;

std内的容器的头文件的使用

这里的string类内函数不需要使用头文件;

正常情况下std命名空间内的容器都需要使用头文件;但是这里的string是特例不需要使用头文件就可以使用;

clear()

堆和栈的生长方向

堆向上生长;

栈向下生长;

对于栈来讲,生长方向是向下的,也就是向着内存地址减小的方向;对于堆来讲,它的生长方向是向上的,是向着内存地址增加的方向增长

栈和堆的动态空间建立和释放

堆是使用malloc()、calloc()、realloc()等函数动态分配的,而使用alloca()函数可以动态分配栈的内存空间,释放的时候由编译器自己释放。

3.new与malloc的属性区别

new是关键字,需要编译器支持;malloc是库函数,需要头文件支持。

4.类模板

参数类型强转

迭代器在g++环境下是指针;在其他条件下比一定是指针;(迭代器初始化多使用auto来定义)

迭代器可以使用加法运算;±数字都可;

除了string类定义了流插入和流提取;其他类都没有定义;原因:其他类都额可以使用范围for等循环来实现;string因为有字符串所以必需要定义一个;

异或知识点:将其第一操作数的每个位与其第二操作数的相应位进行比较。 如果其中一个操作数中的位为 0,而另一个操作数中的位为 1,则相应的结果位设置为 1。 否则,将对应的结果位设置为 0。

当想只是使用类内的函数时;创建匿名对象;

防止被重命名函数

这里解决的是一个文件中已经有头文件;而第三个文件同时包含了这两个文件的问题;

0和另一个数异或的结果是这一个数;

stl中的cbegin()没什么用;原因:begin()这里有const的版本重命名函数

扩容的写法:

先将capacity变到想要括的大小;再使用new来将物理上的内存扩到这个大小;再将原来的内容拷贝过去;

这里可以将其写成一个reserve函数如果没有就写4;有就扩容二倍;

size_type就是size_t;

匿名对象具有常性;

即匿名对象不能修改;

匿名对象赋值普通对象,将会将和并拷贝构造和构造变为构造;

匿名对象赋值引用对象;引用对象需要使用const类型:原因:匿名对象就有常性;

但是两者的时间和作用域都会改变;

拷贝构造函数和 构造函数的隐式转换

默认构造函数

c++将其进行了升级;使内置类型和自定义类型都有了构造函数

内置类型的构造函数和自定义类型相同都是使用的类型加括号的方法:

int +名字+()------》这里的()里加参数;

注意从后向前循环时间使用一个变量大于等于0时间;使用size_t类型会出错;需要使用强制类型转换将类型转位int类型;

vector的insert插入时使用头插不需要强制类型转换原因: 这里使用的是地址;地址不会为0;

new创建的数组如果太大就会抛异常

new函数在不同的编译器失败的操作不同:

相对老的编译返回空指针;

较新的编译器会抛异常;

抛异常

使用try catch语句;

迭代器类型的组成:

typedef会受到访问限定符的限制;

直接放在类中是私有的不能使用;需要放在共有的中;

内置类型也有默认构造函数

int类型的默认初始化是将其赋值为0;

string类型默认初始化是将其赋值为空;

vector类型容器扩容后迭代器将无法使用;

解决方法:

记录长度;将新start+长度记新的迭代器

算法库的头文件:

当一个类里面全部都是使用的是共有;就不使用class而是使用struct;

类内函数不必按照使用顺序来进行定义;

const迭代器:

list 的->的实现

函数内出现模板类去调用内嵌类型或静态成员变量;

这里的添加typename是为了是为了让编译器在第一次检查每个函数时,勉强通过;再在示例化(函数被调用),再进行编译;

该函数可以使用传参数来进行实例化;

将容器定义为模板,让编译器来识别是哪个容器;来进行函数操作

各容器的定义的解读

当使用该定义来定义变量时:使用的是名字+<容器内部的数据类型>

如:vector

linux的指令大部分改变的是文件的属性;

文件内存包含:1.数据2.属性;

Linux的隐藏文件是以.来领先的;

linux指令:

pwd 显示目录;
ls ---(查找)可以查找当前文件也可以查找其他文件;(这里不会改变当前所在位置;
ls-l 显示当前的详细文件内容------简写------》ll;这里的l是lot
mkdir ---创建一个文件夹
cd---是双击的意思;这里配套相对路径或绝对路径
touch ---创建文件;
ls-a 显示隐藏的文件;(Linux中将隐藏文件的名字设置以.开头;
一个文件内都包含两个隐藏文件 :一个是"."的文件;另一个"..."的文件

**"."是当前文件的按键;"..."是上一个文件建的按键;
cd. ------------------------实现的是还在当前目录;
cd... ------------------------实现的是返回到上一目录;
使用:
"."在当前文件夹中实现一个程序的运行时;使用如下:
./文件名
相对路径:
./当前文件文档
.../上一文件夹中的另一个文件夹/该文件的文件或文档;
.../bin/a.txt
指令是在linux系统下用c语言写可执行程序;而这些程序都包含在
/usr/bin目录下
** cd-
------------------------返回上一个浏览的目录
which ------------查找该文件名字的地址;使用:which +" "+文件名;
alias ---------重命名文件名; 使用:alias+"新名字"+"="+" '原名字 ' "
Linux中查找文件使用路径来进行查找

路径:

根目录:

路径分割符号:

该路径是多叉树结构;

Linux用户: root和其他用户;
家目录:这里和根目录不同,是/+家目录(如root)

** touch创建普通文件;如:test.c |test.file|test.txt
** stat
查看文档的详细性质;如时间 ,大小,地址;

** 属性内的时间**:

access 时间这个时间是创立时间;
modify 时间这个时间是内容的最近更改时间
charge时间这个时间是性质更改时间;

touch 的使用该文件的时间将被更改;

** -p直接创建多个文件(文件夹套文件夹)

** tree
使用树状结构来排列该文件夹的文件;

** rmdir** 删除空目录

** rm** 删除文档 (这个会弹出是否删除)

       ![在这里插入图片描述](https://img-blog.csdnimg.cn/4a73b9f4906540e2a03b8e0d3c1d9b20.png)

** rm-f** 强制删除;

** rm-r** 递归删除整个文建的内容;

** rm-fm强制删除整个文件的内容;

这个就linux的文件将全部删除;
8.man指令(字典)

./*删除当前目录下的所有文件;

** cp拷贝

cp-r 将整个目录拷贝

** cp-r-f
强制整个拷贝

将整个目录的拷贝到t中;

** cat**查看普通文件的内容(。c文件)

** mv**

Xshell 全屏的方法:ALT+回车

清屏:使用clear;

  • List item

std:stoi函数是将字符串转化为整形的函数;

类模板和函数模板;:函数模板可以实例化;而类模板不可实例化;

越界编译不会报错;

无参构造函数创建对象时;不要写()直接创建对象即可;

默认模板实参:

和函数的默认实参相同;

cpp 复制代码
template <typename T = int> class A;

内存池和内存适配器区别

allocator内存池container内存适配器

c++添加的构造函数

initializer list构造函数

含有模板的函数指针编译器不被允许的;

所以函数指针相较于反函数差;

函数指针不可作为模板参数

仿函数可以作为模板参数

另外函数指针不可用来存储数据;但是仿函数可以实现数据的存储(原因:本质是一个对象,可以用来存储数据)

类名字的首字母要大写

函数模板的调用有两种方法:

方法一:显示调用:使用<>将要传送的传过去;

方法二:自动推导

算法库内存在堆的库函数:

类的定义和声明;

类可以定义和声明分离;这里类的声明必须在类内存在;

模板的定义和声明不可以分离编译

原因:.h文件和.cpp文件进行运行函数没有实例化;还是模板(参数没有示例化)函数没有被分配内存;

这就导致函数调用时找不到函数地址;

解决:在cpp文件中进行实例化

在.h实现函数定义;(声明和定义放在一起

显示示例化

template+ 返回值+函数名+<类型>+(参数)template+即函数定义

函数模板的实例化

类模板的实例化

之前保护和私有一样;

继承以后;保护就有了意义

右值和左值的区别:

右值:是不可以取地址和别名的值;如变量名、解引用以后的指针;这里只可以使用const变量来进行取别名和指针;

左值:是可以取地址和别名的值;如字面常量、表达式返回值、函数返回值等

C++ 中的const自定义类型的变量可以使用非const的成员函数;(这是C++流下的一个大坑)

示例:

这里的end()返回的变量是临时对象;具有常性;所以在rbegin()中不可以将其进行--;

const和*和&同时出现:

const的指针的引用

二叉树 子节点和父节点的关系

迭代器就是指针的的get函数(get函数的返回值是具有常性)返回值可以被赋值;

反向迭代器的旧版和新版之间的区别

区别于*和->的重定义;和迭代器begin() end() rebegin() reend()这几个函数的定义;
旧版:

新版

相关推荐
我是谁??10 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
发霉的闲鱼43 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt1 小时前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
xiaoxiao涛1 小时前
协程6 --- HOOK
c++·协程
羊小猪~~3 小时前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
脉牛杂德4 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz4 小时前
STL--哈希
c++·算法·哈希算法
CSUC4 小时前
【C++】父类参数有默认值时子类构造函数列表中可以省略该参数
c++
Vanranrr4 小时前
C++ QT
java·c++·qt
鸿儒5174 小时前
C++ lambda 匿名函数
开发语言·c++