【个人C++学习日记】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
C++基础知识
DAY1
变量
作用:方便我们管理内存空间 格式:*数据类型 变量名=变量初始值*
常量
作用:记录程序中不可更改的数据#define 常量名 常量值const 数据类型 常量名 = 常量值
关键字
C++中预先保留的单词不能用作常量或变量eg:int bool double
命名规则
a.由字母、数字、下划线组成 b.第一个字符不能为数字
数据类型
short——2字节 int——4字节
sizeof
作用:统计数据类型所占内存大小sizeof(数据类型/变量)
字符型
//字符创建方式char ch = 'A'; 无中括号 单引号cout << ch << endl;cout << "字节长度:"<<sizeof(ch) << endl;cout << "ASCII编码:" << int(ch) << endl;cout <<"Hell\taaa" << endl;cout << "Hello\taaa" << endl;
int(ch)求ASCII码a.用单引b.单个字符a——97 A——65仅占一个字节,将对应ASCII编码放入存储单元
- 字符串型
a.换行符 \n 与endl交换
b.反斜杠 \\ 第一个\是命令,第二个\是符号
c.水平制表 \t 8个字节
- 字符串型
C:char 变量名[ ]="字符串值"
C++:string 变量名=“字符串值”
C++ 格式使用前加上头文件#include<string>
//C风格字符串-中括号 双引号char str1[] = "hello world";cout << str1 << endl;//2.C++风格字符串string str2 = "hello world";cout << str2 << endl;
- bool——占一字节:true or false
//创建bool数据类型bool flag = true;//true代表真cout << flag << endl;cout << "bool的内存空间:" << sizeof(bool)<<endl;
- 输入:cin>>变量
float f = 3.14f;//不加f为double型cout << "请给f赋值:" << endl;cin >> f;cout << "f=" << f<<endl;string str = "Hello";cout << "请给str赋值:" << endl;cin >> str;cout << "str=" << str<<endl;bool flag =false;cout << "请给flag赋值:" << endl;cin >> flag;cout << "flag=" << flag <<endl; //bool类型非0都为真
cin后不能加endl
- i++:先运算再加一
++i:先加一再运算
//前置和后置int a1= 10;int a2= 10;int b1 = ++a1* 10;int b2 = a2++* 10;cout << "b1="<<b1 << endl;cout << "b2="<<b2<< endl;
b1=110,b2=100
15. 流程结构:
a.顺序——按顺序b.选择——按条件c.循环——按条件循环
16.比较运算符
//比较运算符int a = 10;int b = 20;cout << (a ==b) << endl;//加括号表优先级cout << (a < b) << endl;cout << (a > b) << endl;
- if条件语句
int score = 0;cout << "输入分数:";cin>>score ;cout << "输入分数为:"<<score<<endl;if (score >= 600) {cout << "恭喜你" << endl;}
DAY2
1.多条件if语句
//多条件if语句int score = 0;cout << "输入高考分数:";cin >> score;if (score > 600) {cout << "恭喜你考上一本大学" << endl;if (score>700) {cout << "清华大学" << endl;}else if(score>690) {cout << "北京大学" << endl;}elsecout << "普通一本" << endl;}else if (500 < score ) {cout << "恭喜你考上二本大学" << endl;}else cout << "你没考上大学" << endl;
----if条件要注意不同条件之间的包含关系,范围小的在前
----若要表示5<a<10,需分为两个式子,a>5&&a<10
2.三只小猪称体重示例
代码思想:比较A和B
若A重,比较A和C若B重,比较B和C
//多条件if语句int A = 0,B = 0, C = 0;cout << "小猪A体重:";cin >> A;cout << "小猪B体重:";cin >> B ;cout << "小猪C体重:";cin >> C ;if (A > B) {if (A > C) {cout << "小猪A最重" << endl;}else {cout << "小猪C最重" << endl;}}else {if (B> C) {cout << "小猪B最重" << endl;}else {cout << "小猪C最重" << endl;}}
3.三目运算符
表达式1?表达式2:表达式3
//创建三个变量a b c
//比较a和b,将变量大的值赋给cint a = 1;int b = 4;int c = 0;c = a > b ? a : b;cout << "c=" << c << endl;//C++中三目运算符返回变量,可以继续赋值(a > b ? a : b)=100;cout << "a=" << a << endl;cout << "b=" << b << endl;return 0;
3.switch语句
作用:执行多条件分支语句
switch(表达式){case 结果1:执行语句;break;case 结果1:执行语句;break;...default:执行语句;break;}解读:表达式是结果几就执行几的语句,如果都不符合,则执行default语句,然后退出。注意:a.switch语句中表达式类型只能是整型或字符型b.采用字符型时,字符要加单引号,否则会被系统判定为变量
//switch语句char level='A';cout << "输入考试等级";cin >> level;switch (level) {case 'A':cout << "优秀" << endl;break;case 'B':cout << "良好" << endl;break;case 'C':cout << "一般" << endl;break;case 'D':cout << "不合格" << endl;break;default:cout << "输入格式错误" << endl;break;}
DAY3
1.while循环语句
while(循环条件){循环语句}
//while循环int num = 0;while (num < 10) {num++;cout << num << endl;}
2.猜数字游戏(while案例)
设置随机函数rand的种子,以保证rand的数每次都不相同
void srand(unsigned int seed)
其中seed多选用时间函数time(null);
在调用rand函数前,srand要先被调用
//1.系统生成随机数srand(unsigned int(time(NULL)));int num = rand()%100 + 1;//生成1~100的随机数while(1){ //while循环使猜测可以一直进行//2.玩家进行猜测int val;cout << "请输入数据:";cin >> val;//3.判断玩家的猜测if (num > val) {cout << "输入过小" << endl;}else if (num < val) {cout << "输入过大" << endl;}else {cout << "恭喜你回答正确" << endl;break;//猜对后退出循环}}
3.do…while循环语句
do{循环语句}while(循环条件);
与while的区别:do...while会先执行一次循环语句,再判断循环条件
int main()
{//do...while输出0~9int num = 0;do {cout << num << endl;num++;} while (num < 10);system("pause");return 0;
}
4.水仙花数(do…while案例)
水仙花数:3位数每个位上数字的3次幂之和等于其本身
eg:1^3+5^3+3^3=153
int main()
{//do...while找出所有水仙花数int num = 100;int a,b,c;do {a = (num % 10) * (num % 10) * (num % 10);//个位b = ((num / 10) % 10) * ((num / 10) % 10) * ((num / 10) % 10);//十位c=(num / 100)*(num / 100)*(num / 100);//百位if (num == a+b+c) {//判断是否水仙花数cout << num << endl; }num++;} while (num < 1000);system("pause");return 0;
}
5.for循环语句
for(起始表达式;条件表达式;末尾循环体){循环语句};
注意:末尾循环体最后执行
//for循环 从0打印到9int i = 0;for (i = 0; i < 10; i++) {cout << i << endl; }
5.敲桌子(for循环案例)
规则:从1~100,若数字含或7的倍数,则打印敲桌子,其余数字直接输出
int main()
{int i,a,b;for (i = 0; i <= 100; i++) {a = i % 10;//个位b = i / 10;//十位if (i % 7 == 0 || a == 7 || b == 7) {cout << "敲桌子" << endl;}else {cout << i << endl;}}system("pause");return 0;
}
6.嵌套循环
打印10*10的星图
int i, j;for (i = 0; i <=10; i++) {for(j=0;j<=10;j++){cout << "* ";}cout << endl;}
7.乘法口诀表(for案例)
根据表格可观察到公式:列数*函数=结果
int i, j;for (i = 1; i <10; i++) {//行数for(j=1;j<i;j++){//列数cout << j<<"*"<<i<<"=" << i * j<<" ";}cout << endl;}
8.continue
作用:跳过本次循环中余下尚未执行的语句,继续执行下一次循环,break不会执行下一次循环
int main()
{for(int i = 0; i <= 100; i++) {//奇数输出,偶数不输出if(i%2==0){continue;//偶数不输出,进行下一次循环}cout << i << endl;}system("pause");return 0;
}
9.goto语句
作用:无条件跳转语句,想去哪里去哪里
语法:goto 标记(多用大写字母)
int main()
{cout << "1XXXX" << endl;goto FLAG;//跳到标记行cout << "2XXXX" << endl;cout << "3XXXX" << endl;FLAG://做标记cout << "4XXXX" << endl;system("pause");return 0;
}
DAY3.1数组
数组:由连续内存组成
1.一维数组
三种定义方法:
1.数组类型 数组名 [ 数组长度 ];
2.数组类型 数组名 [ 数组长度 ] = { 值1,值2,...};
3.数组类型 数组名 [ ] = { 值1,值2,...};
//定义数组时必须有初始长度,错误示范:int arr[ ];无长度无值,无法判断长度
//输出时若数组长度不够,则会补0
int arr[5]={10,20,30,40,50};//给数组中元素进行赋值for (int i = 0; i < 5; i++) {cout << arr[i] << endl;}
2.一维数组组名
作用:1.统计数组长度 总:sizeof(arr) 单个:sizeof(arr[0])2.获取数组在内存中的首地址 数组首地址:(int)arr数组首元素地址:(int)&arr[0] //&是取址符
注意:数组名是常量,不可以赋值
int arr[5]={10,20,30,40,50};cout << "整个数组占用内存空间:"<<sizeof(arr) << endl;cout << "单个元素占用内存空间:" << sizeof(arr[0]) << endl;cout << "数组中元素个数:" << sizeof(arr)/ sizeof(arr[0]) << endl;cout << "数组首地址:" << (int)arr << endl;cout << "数组首元素首地址:" << (int)&arr[0] << endl;cout << "数组首元素首地址:" << (int)&arr[1] << endl;
3.五只小猪称体重(数组中找最大值)
思想:遍历数组中各元素,若所遍历元素比我认定的最大值要大,则更新最大值。
int arr[5]={10,20,60,40,50};int max = 0;for (int i = 0; i < 5; i++) {max=(arr[i] > max) ? arr[i] : max;}cout << "最大值:" << max << endl;
DAY4
1.一维数组逆置
思想:初始化定义首尾元素下标,借助temp值进行首尾互换,首元素递增,尾元素递减,直到两者下标相等则退出循环。
int arr[5]={10,20,30,40,50};cout << "元素逆置前:" ;for (int i = 0; i < 5; i++) {cout << arr[i] <<" ";}int start = 0;//元素起始下标int end = sizeof(arr) / sizeof(arr[0]) - 1;//下标从0开始计,因此计算末尾元素下标要减一cout << " 元素逆置后:" ;while(end>start) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp; start++;end--;}//输出逆置数组cout <<endl<< "元素逆置后:";for (int i = 0; i < 5; i++) {cout << arr[i] << " ";}
2.冒泡排序
思想:
1.比较相邻两元素,第一个大于第二个就进行交换;
2.每轮执行完毕后,都可以找到该轮元素的最大值;
3.对剩下的元素继续遍历,每次比较次数减一,直到剩一个元素。
注意:排序总轮数=元素个数-1;(从0开始计)比较次数=当前元素数-1=(元素总个数-当前排序轮数)-1
int arr[7]={5,2,8,6,3,4,7};cout << "元素排序前:"<<endl;for (int i = 0; i < 7; i++) {cout << arr[i] << " ";}cout << endl;for (int i = 0; i < 7-1; i++) {//循环轮数for (int j = 0; j < 7 - i - 1; j++) {//各轮比较次数if (arr[j] > arr[j + 1]) {int temp = arr[j];//交换arr[j] = arr[j + 1];arr[j + 1] = temp;}}}cout << "元素排序后:" << endl;for (int i = 0; i < 7; i++) {cout << arr[i] << " ";}
3.二维数组定义
二维数组四种定义方式:
1.数据类型 数组名[行数][列数];
2.数据类型 数组名[行数][列数]={{1,2},{3,4}};
3.数据类型 数组名[行数][列数]={1,2,3,4};
4.数据类型 数组名[ ][列数]={1,2,3,4};
int arr[2][3] = { 1,2,3,4,5,6 };for (int i = 0; i < 2; i++) {//二维数组输出for (int j = 0; j < 3; j++) {cout << arr[i][j] << " ";}cout << endl;}
4.二维数组数组名
int arr[2][3] = {7,2,3,4,5,6 };//1.查看内存空间cout << "二维数组所占内存空间:" <<sizeof(arr) << endl;cout << "二维数组第一行占内存空间:" << sizeof(arr[0]) << endl;cout << "二维数组第一个占内存空间:" << sizeof(arr[0][0]) << endl;cout << "二维数组行数为:" << sizeof(arr)/ sizeof(arr[0]) << endl;cout << "二维数组行数为:" << sizeof(arr[0]) / sizeof(arr[0][0]) << endl;//2.查看二维数组首地址cout << "二维数组首地址为:" << (int)arr << endl;cout << "二维数组第一行首地址为:" << (int)arr[0] << endl;cout << "二维数组第一个元素首地址为:" << (int)arr[0][0] << endl;
5.成绩统计(二维数组)
说明:统计三个同学语数英成绩的总和,采用3*3二维数组,将各行元素相加。
int score[3][3] = {100,100,100,80,80,80,50,50,50 };for (int i = 0; i < 3; i++) {//行int sum = 0;for (int j = 0; j < 3; j++) {//列sum =sum + score[i][j];//一行代表一位同学各科目成绩}cout << "第"<<i+1<<"位同学分数总和为:"<<sum << endl;}
DAY5
1.函数的定义与调用
定义:
返回值类型 函数名(参数列表)
{函数体语句return表达式 //函数结果}
调用:函数名称 (参数)
1.若函数定义有参数,调用时也必须有参数。
2.若有返回值,则在主函数中接收该返回值,
main中调用格式:数组类型 变量名=函数名(返回值),int a=test(1)。
功能:两个整数相加
1.返回值类型:int
2.函数名 add
3.参数列表 (int num1,int num2)
4.函数体语句 int sun=num1+num2
5.return表达式 return sum
其中,a,b为真实数据,为实参;num1和num2并不是真实数据,是形参;当调用函数时,实参的值会传递给形参。
int add(int num1, int num2) {int sum = num1 + num2;return sum;
}
int main()
{int a = 6;int b = 3;int c = add(a, b);//函数调用格式cout << "总和为:"<<c<< endl;system("pause");return 0;
}
2.值传递
定义:函数调用时,实参将数值传入给形参。
注意:值传递时,如果形参发生改变,不会影响实参。
功能:实现两数字交换函数 //不需要返回值时函数类型定义为void
void swap(int a, int b) {int temp=a;a = b;b = temp;
}
int main() {int num1 = 1;int num2 = 0;swap(num1, num2);//实参num1和num2将数值传递给形参a,b进行交换,但实参值没有改变system("pause");return 0;
}
3.函数声明
作用:提前告诉编译器该函数的存在,若函数在主函数之后,则必须先声明。
eg:int main(int a,int b);
位置:主函数或其他函数之前 //不在函数里或主函数里,是单独的语句
注意:声明可以多次,定义只能一次
3.函数分文件编写
步骤: 1.创建后缀名为.h的头文件 //头文件带双引号表示是自己写的2.创建后缀名为.cpp的源文件3.在头文件中写函数的声明4.在源文件中写函数的定义
1.创建后缀名为.h头文件+在头文件中写函数声明
2.创建后缀名为.cpp源文件+在源文件中写函数定义3.主函数<C++书写Hello World>调用该交换函数时在头文件声明即可,格式:#include“swap.h”
DAY6
1.指针基本概念
作用:间接访问内存,可用指针保存地址编号,多为十六进制(例:0x0000)
变量指向数值,指针指向数值的地址
指针变量:数据类型 * 变量名
//1.定义指针int* p;//p指point,*用在定义指针时int a = 10;//2.指针变量赋值p = &a;//&为取址符号,p存储指针cout << "p=" << p << endl;cout << "a="<<&a << endl;//输出相同,都是a的地址//2.使用指针//采用解引用操作*找到指针指向的内存中的数据*p = 1000;//解引用后,可以对该值读取,也可以修改cout << "*p=" << *p;//修改后原值会发生改变cout << "a=" << a;
//求指针内存空间int a = 10;//int* p;//p指point,*用在定义指针时//p = &a;//&为取址符号,p存储指针int* p = &a;//等同于上面两句//求指针所占内存空间cout << *p << endl;//这里*表示解引用//和上面定义时的*不是一个cout << sizeof(p) << endl;cout << sizeof(int *) << endl;cout << sizeof(float *) << endl;//可以改变数据类型
2.空指针和野指针
空指针:指针指向编号为0的空间,用于初始化指针,不可访问。0~255之间内存编号为系统占用内存,不可访问
野指针:指向非法内存空间的指针变量,访问我们没有申请的内存空间,应避免出现
//空指针
int* p = NULL;
//野指针,访问时指针报错
int* p = (int*)0X1100;
3.const修饰指针
1.常量指针:const int * p=&a
特点:指针指向可以改,指向的值不能改
2.指针常量: int * const p=&a
特点:指针指向不能改,指向的值可以改
3.const即修饰指针又修饰常量:const int * const p=&a
特点:指向和值都不能改
总结:const跟谁谁不能修改
4.指针和数组
int arr[] = { 1,2,3,4,5 };int* p = arr;//定义一个指向指针的数组cout << "输出数组第一个元素:" << arr[0] << endl;cout << "指针访问的第一个元素:" << *p << endl;//上面输出相同,利用指针遍历数组for (int i = 0; i < 5; i++) {cout << *p << endl;p++;}
5.指针和函数
值传递不改变实参,地址传递改变实参
void swap(int* p1, int* p2) {int temp;temp = *p1;*p1 = *p2;*p2 = temp;
}int main() {int a = 10;int b = 20;swap(&a, &b);//地址传递cout << "a=" << a << endl;cout << "b=" << b << endl;system("pause");return 0;
}
6.指针、函数、函数
描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序
void Bubble(int* arr, int len) {//arr为数组首地址for (int i = 0; i < len-1; i++) {//循环轮数for (int j = 0; j < len - i-1; j++){if (arr[j] > arr[j + 1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}
}void show(int* arr, int len) {for (int i = 0; i < len ; i++) {cout << arr[i] << endl;}
}int main() {//1.先创建数组int arr[] = { 3,2,5,1,4 };int len = sizeof(arr) / sizeof(arr[0]);//2.创建函数实现排序Bubble(arr, len);show(arr, len);system("pause");return 0;
}
7.结构体定义和使用
定义:用户自定义的数据类型,允许用户存储不同的数据类型
语法:struct 结构体名{结构体成员列表}
创建方式:
1.struct 结构体名 变量名
2.struct 结构体名 变量名={成员1值,成员2值…}
3.定义结构体时顺便创建变量
8.结构体数组
struct Student {//学生结构体string name;int age;
};int main() {Student arr[3]={{"张三",18},{"李四",19},{"王五",20}};//修改数组中元素arr[1].name = "小红";arr[2].age = 30;//遍历结构体数组for (int i = 0; i < 3; i++) {cout << arr[i].name << endl;}system("pause");return 0;
}
9.结构体指针
指针采用->访问结构体成员属性
struct Student {//学生结构体string name;int age;
};int main() {Student s={"张三",18};//定义指针p指向s地址Student* p = &s;//采用->访问结构体成员属性cout << p->name << endl;system("pause");return 0;
}
10.结构体嵌套
struct Student {//学生结构体string name;int age;
};
struct Teacher {//老师结构体int id;int age;struct Student stu;
};
int main() {Teacher t;t.id = 100;t.age = 37;t.stu.name = "张三";t.stu.age = 17;system("pause");return 0;
}
11.结构体作函数参数
值传递不改变实参的值,地址传递改变实参的值。
值传递在数据量很大时,每份数据都复制一个副本进行操作,有点浪费空间。此时推荐地址传递,一个指针只占4字节内存,比每份数据所占内存要小得多,且不会复制副本。
struct Student {//学生结构体string name;int age;
};
//地址传递
void show(Student *s) {//声明指针ss->name = "李四";//修改了张三的名字cout << s->name << endl;//地址传递用箭头访问
}int main() {Student s;s.name = "张三";s.age = 18;cout << s.name << endl;//值传递用.访问show(&s);//引用地址符&system("pause");return 0;
}
DAY7
1.结构体中const
函数参数前加const,则该地址指向的实参值不可更改,解决了采用地址传递时,对实参进行误修改的问题。
void show(const Student* p) {//s->name = "李四";cout << p->name << endl;//地址传递用箭头访问
}
int main() {//创建结构体变量Student s={"张三",18};show(&s);system("pause");return 0;
}
2.结构体案例(英雄冒泡)
//设计英雄结构体
struct Hero {string name;int age;string sex;
};//注意定义顺序对应数组内顺序//按年龄对英雄进行排序
void bubblesort(struct Hero arr[], int len) {for (int i = 0; i < len - 1; i++) {//排序次数for (int j = 0; j < len - 1 - i; j++) {//i与已排好的次数相等if (arr[j].age > arr[j + 1].age) {//注意此处直接arr就好struct Hero temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}//排序过程}}
}//打印英雄信息
void show(struct Hero arr[], int len) {for (int i = 0;i < len; i++) {cout << "name:" << arr[i].name << " sex:" << arr[i].sex << " age:" << arr[i].age<<endl;}
}
int main() {//创建数组存放五名英雄struct Hero arr[5]= {{"刘备",23,"男"}, {"关羽",20,"男"},{"张飞",22,"男"},{"赵龙",21,"男"}, {"貂蝉",19,"女"},};//2.通过函数给老师和学生赋值int len = sizeof(arr) / sizeof(arr[0]);//打印信息cout << "排序前:" << endl;show(arr, len);cout << "排序后:" << endl;bubblesort(arr, len);show(arr, len);system("pause");return 0;
}
总结
通讯录管理体系见文件
【个人C++学习日记】相关推荐
- java的圆周率_java学习日记,圆周率的打印
前段时间看到听说学习java每天写技术贴会对自己提升很大,我现在学习java也就2个周,算不上技术贴,就写写学习日记吧. 昨天师傅给我出了一道题,说是试试用java打印圆周率. 刚开始我的思路是,如果 ...
- GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考
GPU(CUDA)学习日记(十一)------ 深入理解CUDA线程层次以及关于设置线程数的思考 标签: cuda存储线程结构网格 2012-12-07 16:30 6298人阅读 评论(4)收藏 举 ...
- GPU(CUDA)学习日记(十三)------ CUDA内存简介
GPU(CUDA)学习日记(十三)------ CUDA内存简介 标签: cuda存储线程结构 2012-12-07 16:53 2902人阅读 评论(0)收藏 举报 分类: GPU(16) CUDA ...
- GPU(CUDA)学习日记(九)------ CUDA存储器模型
GPU(CUDA)学习日记(九)------ CUDA存储器模型 标签: cuda存储bindingcache编程api 2012-09-27 10:53 1677人阅读 评论(1) 收藏 举报 分类 ...
- 语言余一个负数_C语言学习日记(8)——整数溢出
小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...
- SpringMVC学习日记 1.Spring框架
SpringMVC学习日记 1.Spring框架 Spring简介 Spring框架是一个开源框架,由Rod Johnson组织和开发,生产目的在于简化企业级应用的开发. 主要特性 非侵入(no-in ...
- 微信开发学习日记(一):快速阅读5本书,掌握整体背景
2015年1月开始学习微信开发. 已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难.所以,我比较强调学习效率.一天学一点,是不能满足我的快速学习欲望的. ...
- const 指针_C语言学习日记(11)——const与指针
对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...
- 十五的学习日记20160926-你不知道的JS笔记/
十五的学习日记20160926 JavaScript 一个用于检测正负值的函数,可以用它辨别-0值. 我觉得挺好用,以后可以写到自己的工具库里. //函数:检查传入参数是否为正数.Number=> ...
- oracle工作日记,Oracle学习日记【4】
1.查询所返回的列数以及列的类型必须匹配,列名可以不同. 2.只有UNION ALL不会去重.其他三个都需要排序后去重,性能比较差. 2.连接查询 2.1.内连接(INNER JOIN):INNER可 ...
最新文章
- 第十二周项目二-Time类中的运算符重载
- 爬虫:获取页面 -- request库的使用
- DL之perceptron:利用perceptron感知机对股票实现预测
- SQL Server,Oracle,DB2索引建立语句的对比
- HTML+CSS+JS实现燃烧的火焰火花动画特效
- 32k通过地址跳转到函数_【HYPERLINK】函数技巧,你一定要知道的!!!
- python 类的使用基础
- python newbie——PE No.3
- -bash: cd: /.ssh: 没有那个文件或目录
- 3-5-多数组k大值
- Topcoder SRM 144 DIV 1
- weblogic下载安装
- “麻将换皮”的《刀塔自走棋》会是下一个“吃鸡”吗?
- 微型计算机不是ecu,ECU升级是什么意思?
- 今日恐慌与贪婪指数为20 恐慌程度有所上升
- python wxpython菜鸟教程_wxpython新手向教程
- UINX环境高级编程笔记 第3章 文件I/O
- AlertManager实现企业微信报警(十三)
- cacheable 表达式_Spring Boot缓存注解@Cacheable、@CacheEvict、@CachePut使用
- 刷完这50个标准库模块:没人比我更懂Python了
热门文章
- 什么是restful,什么是rest风格
- Asp.Net 汉字转(拼音)
- Eclipse解决SVN版本冲突
- 华为手机怎么隐藏按键图标_原来华为手机右上角隐藏扫描仪!纸质档一键电子化,真的涨知识了...
- 学会区分 RNN 的 output 和 state
- 在VS中使用Wind数据终端API的经验(一)
- Android Fastboot 模式下刷机教程
- HM-SpringCloud微服务系列11.4【缓存同步】
- 模电(三)晶体三极管
- 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】