系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
第四章
字符串可以直接相加减
s2 += " for a day"
s3 = s1 + s2
数组字符串的加减,函数strcpy
#include <string>
#include <cstring>
using namespace std;
char charr1[20];
char charr2[20] = "jaguar";
string str1;
string str2 = "panther";
str1 = str2;
strcpy(charr1, charr2);
str1 += " paste";
strcat(charr1, " juice");
int len1 = str1.size();
int len2 = strlen(charr1);
读取函数
如getline(cin,str)
获取一行输入
结构体
数组类型必须相同,结构体中可以不同类型
inflatable就相当于int,double,char等的用法
结构体里面都是分号,表明完整一句话
大花括号结束需要分号;
struct inflatable
{
char name[20];
float volume;
double price;
};
c语言需要用
struct inflatable guest
C++只需要
inflatable guest
成员运算符(.)点来访问
结构体放在main函数里面 那么其他函数就不能用 一般放在外边,这样所有函数都能使用。
结构体变量赋值(注意中间不是一句话所以用逗号隔开)
inflatable guest =
{
"Glorious Gloria",
1.88,
29.99
};
结构体可以直接等式进行赋值,但是数组不行
结构体数组
数组中每个元素都是数组(外层花括号表示创建数组,内层花括号用来表示结构体)
#include <iostream>
struct inflatable
{
char name[20];
float volume;
double price;
};
int main(void)
{
using namespace std;
inflatable guests[2] =
{
{"Bambi", 0.5, 21.99},
{"Godzilla", 2000, 565.99}
};
cout << "The guests " << guests[0].name << " and " << guests[1].name << " have a combined volume of "
<< guests[0].volume + guests[1].volume << " cubic feet." << endl;
return 0;
共用体(union)联合体
只能取用一种数据类型,所以占用空间取变量最大空间。共用同一个内存空间,且以最大成员内存位准。
枚举类型(enum)
枚举类型的的变量只能使用枚举范围的变量
枚举类型不能相加
可以强制类型转化来赋值给枚举类型。
目的是为了常见符号常量而不是单纯为了创建枚举类型
生僻:最大枚举值为比最大的数值的(2的n次方-1)
指针(里面都是地址)
地址一般是16进制的
*取值&取址
int *a(创建一个指针)*a(取地址a的值)
int*p1,p2;(p1是指针,p2不是指针) int*p1,*p2;
指针的大小都是一样的,但是指针指向的内容char或者int的大小不一样
警告:在对指针的内容进行确定之前需要确定指针的位置
(int*)强制指针类型转化
New函数(返回首地址)
int占4字节
double占8字节
char占一个字节
难点:&pointer(取出指针的地址,之前说的都是变量的地址,可以想象地址和变量都是实体,实体都会有物理地址,所以指针在内存中也是有地址的)
int *pt = new int;(为指针开辟一个物理空间)
GNU nano 4.8 17.cpp #include <iostream>
int main(void)
{
using namespace std;
int nights = 1001;
int *pt = new int;
*pt = 1001;
cout << "nights value = " << nights << " : location = " << &nights << endl;
cout << "int value = " << *pt << " : location = " << pt << endl;
double *pd = new double;
*pd = 10000001.0;
cout << "double value = " << *pd << " : location = " << pd << endl;
cout << "location of pointer pd = " << &pd << endl;
cout << "size of pt = " << sizeof(pt) << endl;
cout << "size of *pt = " << sizeof(*pt) << endl;
cout << "size of pd = " << sizeof(pd) << endl;
cout << "size of *pd = " << sizeof(*pd) << endl;
return 0;
}
结论指针占用的的大小为8字节(因为指针是地址64位就是八个字节)
delete(C++)或者free(c)来释放内存
delete指针
动态数组
创建double类型的数组,指针p3指向该数组的第一个地址
delete 【】p3
double *p3 = new double [3];
相当于买房子,创建一个房子卖了就卖了,没创建房子就别释放房子
指针和数组可以通用
所以可以指针加下标的方式来访问,数组名指向数组的第一个元素的地址。
指针可以:p3 = p3 - 1;但是数组不可以是因为数组表示数组第一个的地址是个常量,常量不可以赋值,但是指针可以,是因为指针是变量
#include <iostream>
int main(void)
{
using namespace std;
double *p3 = new double [3];
p3[0] = 0.2;
p3[1] = 0.5;
p3[2] = 0.8;
cout << "p3[1] is " << p3[1] << endl;
p3 = p3 + 1;
cout << "Now p3[0] is " << p3[0] << endl;
cout << "p3[1] is " << p3[1] << endl;
p3 = p3 - 1;
delete [] p3;
return 0;
}
指针指向double,int,跨过相应的长度;
地址加一表示跨过这个元素指向下一元素的地址,
而sizeof(数组名)此时数组名表示数组大小不是地址,对数组名取地址表示这个数组的地址
cout << "*stacks = " << *stacks << ", *(stacks + 1) = " << *(stacks + 1) << endl;
打印的地址是char型的时候,一直会打印到\0(空字符串的时候)
**指向地址的地址 数组名就是第一个元素的地址(这个元素还是地址所以就是地址的地址 )
地址访问成员是->
结构体指针和结构体变量
Pizza *pizza = new Pizza
CandyBar snack[3] = {{"Mocha Munch", 2.3, 350}, {"Flip Fleming", 3.2, 500}, {"Micheal Bay", 4.3, 400}};
CandyBar *pt = new CandyBar[3]********************pt[0]当成数组使用
数组的形式
第五章
一条语句不用花括号缩进就行
四步走
i = 0
i < 5(其实是强制转换成布尔值)
cout << "C++ knows loop" << endl;
i++
*++pt 2)++*pt 3)(*pt)++ 4)*pt++的区别
取值和++优先级相同(从右向左的方向)
cout << "*pt++ = " << *pt++ << endl;
用完指针之后再++然后再取值*(后缀优先级比前缀高)
,逗号运算符是最低的
cats = 17,240;先赋值17。然后逗号是取值右边的。
x +3>y-2关系运算符低
for循环和while的循环(注for循环的两个分号不能省略)
do while多用于验证
cin会跨过空白字符不会捕获他忽略他
cin.get(ch)一个不漏的读取
第一行不会读取空格
第二行会