【系统性】 循序渐进学C++

news2024/10/7 18:22:41

循序渐进学C++

第一阶段:基础

一、环境配置

1.1.第一个程序(基本格式)

#include <iosteam>
using namespace std;

int main(){
	cout<<"hello world"<<endl;
	system("pause");
}

​ 模板

#include <iosteam>
using namespace std;
#include <string.h>
int main(){
	//主要功能代码区
    
    
	system("pause");
}
1.2注释

image-20240312180130454

1.3变量

​ 意义:方便管理内存空间

​ 方法:数据类型 变量名 = 数字;

#include <iosteam>
using namespace std;

int main(){
	int a = 10; 
	cout<<"a = "<<a<<endl;
	system("pause");
}
1.4常量

image-20240312180534938

#include <iosteam>
using namespace std;
#def Day 7
int main(){
  
	cout<<"一周一共有"<<Day<<endl;
	system("pause");
  
}
1.5关键字

image-20240312180905002

1.6变量命名规则

image-20240312181052920

二、数据类型

​ 目的:给数据存分配合适的空间大小;避免资源浪费

2.1整形

image-20240312181159521

2.2 sizeof

image-20240312182020423

int main(){
	cout<<"short类型内存为:"<<sizeof(short)<<endl;
}

image-20240312182218512

2.3浮点型

image-20240312182322358

image-20240312182606364

​ float占用四个字节

​ double占用八个字节

​ 科学计数法

image-20240312182812067

2.4字符型

​ 注意事项:单引号;单引号里面只能放一个;ASCII值;int(char);A65;a97.

image-20240312182913797

2.5转义字符

image-20240313080814589

2.6字符串型

​ #include string

​ string a = “你好世界” //C++中的变量

​ char str[] =“Hello world” //C中的

image-20240313081406116

2.7布尔数据类型

image-20240313081756468

2.8数据的输入

image-20240313081956558

#include <iosteam>
using namespace std;
#include <string>

int main(){
  int a =0;
	cout<<"请给a赋值 = "<<endl;
  cin>>a;把输入的值赋值给a
  cout<<"a = "<<a<<endl;
  
  char b ='a';
	cout<<"请给b赋值 = "<<endl;
  cin>>a;把输入的值赋值给a
  cout<<"b = "<<a<<endl;
  
	system("pause");
  
}

三、运算符

image-20240313082511741

3.1 算术运算符号

image-20240313082546265

#include <iostream>
using namespace std;

int main() {
    int num1, num2;
    cout << "请输入两个整数:" << endl;
    cin >> num1 >> num2;

    // 加法
    int sum = num1 + num2;
    cout << "加法结果:" << sum << endl;

    // 减法
    int difference = num1 - num2;
    cout << "减法结果:" << difference << endl;

    // 乘法
    int product = num1 * num2;
    cout << "乘法结果:" << product << endl;

    // 除法
    if (num2 != 0) {
        double quotient = static_cast<double>(num1) / static_cast<double>(num2);
        cout << "除法结果:" << quotient << endl;
    } else {
        cout << "除数不能为0" << endl;
    }

    return 0;
}

image-20240313083645770

image-20240313084009944

3.2赋值运算符

image-20240313084101731

#include <iostream>
using namespace std;

int main() {
    int a = 10; // 直接赋值
    cout << "a = " << a << endl;

    a += 5; // 加法赋值
    cout << "a = " << a << endl;

    a -= 3; // 减法赋值
    cout << "a = " << a << endl;

    a *= 2; // 乘法赋值
    cout << "a = " << a << endl;

    a /= 4; // 除法赋值
    cout << "a = " << a << endl;

    a %= 6; // 取模赋值
    cout << "a = " << a << endl;
    
    int v = 10;
    ++v ;
    cout<<"v = "<<v<<endl;
  
  

    return 0;
}


3.3比较运算符

image-20240313084313494

#include <iostream>
using namespace std;

int main() {
    int a = 10, b = 20;

    // 等于运算符
    if (a == b) {
        cout << "a等于b" << endl;
    } else {
        cout << "a不等于b" << endl;
    }

    // 不等于运算符
    if (a != b) {
        cout << "a不等于b" << endl;
    } else {
        cout << "a等于b" << endl;
    }

    // 大于运算符
    if (a > b) {
        cout << "a大于b" << endl;
    } else {
        cout << "a不大于b" << endl;
    }

    // 小于运算符
    if (a < b) {
        cout << "a小于b" << endl;
    } else {
        cout << "a不小于b" << endl;
    }

    // 大于等于运算符
    if (a >= b) {
        cout << "a大于等于b" << endl;
    } else {
        cout << "a小于b" << endl;
    }

    // 小于等于运算符
    if (a <= b) {
        cout << "a小于等于b" << endl;
    } else {
        cout << "a大于b" << endl;
    }
	system("pause");
    return 0;
}

3.4逻辑运算

image-20240313084600685

#include <iostream>
using namespace std;

int main() {
    bool a = true, b = false;

    // 与运算符
    if (a && b) {
        cout << "a和b都为真" << endl;
    } else {
        cout << "a和b不都为真" << endl;
    }

    // 或运算符
    if (a || b) {
        cout << "a和b至少有一个为真" << endl;
    } else {
        cout << "a和b都不为真" << endl;
    }

    // 非运算符
    if (!a) {
        cout << "a为假" << endl;
    } else {
        cout << "a为真" << endl;
    }
	system("pause");
    return 0;
}

四、 程序流程结构

image-20240313085000656

4.1顺序结构
#include <iostream>
using namespace std;

int main() {
    int num = 0;

    // if语句
    if (num > 0) {
        cout << "num大于0" << endl;
    } else if (num < 0) {
        cout << "num小于0" << endl;
    } else {
        cout << "num等于0" << endl;
    }

    return 0;
}

if (条件表达式) {
    // 当条件表达式为真时执行的代码块
} else if (条件表达式) {
    // 当第一个条件表达式为假,且当前条件表达式为真时执行的代码块
} else {
    // 当所有条件表达式都为假时执行的代码块
}

别加分号

4.2选择顺序结构

#include <iostream>
using namespace std;
int main() {
    int score = 0;
    cout << "输入分数" << endl;
    cin >> score;
    cout << "您的分数为:" << score << endl;

    if (score > 600) {
        cout << "恭喜你考上了一本大学" << endl;
    }
    else if (500 < score < 600) {
        cout << "恭喜你考上了二本大学" << endl;
    }
    else if (400 < score < 500) {
        cout << "恭喜你考上了二本大学" << endl;
    }

    system("pause");
    return 0;


}

4.2嵌套语句

​ 案例一需求

image-20240317185320906

​ 代码实现

#include <iostream>
using namespace std;

int main() {
    int score;
    cout << "请输入高考考试分数: ";
    cin >> score;

    if (score > 600) {
        cout << "考上一本" << endl;
        if (score > 700) {
            cout << "考入北大" << endl;
        } else if (score > 650) {
            cout << "考入清华" << endl;
        } else if (score > 600) {
            cout << "考入人大" << endl;
        }
    } else if (score > 500) {
        cout << "考上二本" << endl;
    } else if (score > 400) {
        cout << "考上三本" << endl;
    } else {
        cout << "未考上本科" << endl;
    }

    return 0;
}

​ 案例二需求----三只小猪称体重
image-20240317185659667

​ 代码实现:

#include <iostream>
using namespace std;

int main() {
    int weightA, weightB, weightC;
    cout << "请输入小猪A的体重:";
    cin >> weightA;
    cout << "请输入小猪B的体重:";
    cin >> weightB;
    cout << "请输入小猪C的体重:";
    cin >> weightC;

    if (weightA >= weightB && weightA >= weightC) {
        cout << "小猪A最重" << endl;
    } else if (weightB >= weightA && weightB >= weightC) {
        cout << "小猪B最重" << endl;
    } else {
        cout << "小猪C最重" << endl;
    }

    return 0;
}

4.3 三目运算符:

​ 要求

image-20240317191530535

​ 代码实现:

#include <iostream>
using namespace std;

int main() {
    int weightA, weightB, weightC;
    cout << "请输入小猪A的体重:";
    cin >> weightA;
    cout << "请输入小猪B的体重:";
    cin >> weightB;
    cout << "请输入小猪C的体重:";
    cin >> weightC;

    string heaviest = (weightA >= weightB && weightA >= weightC) ? "小猪A" : (weightB >= weightA && weightB >= weightC) ? "小猪B" : "小猪C";
    cout << heaviest << "最重" << endl;

    return 0;
}

​ 注意:?是判断的意思

​ 就是":"就是否则就的意思
image-20240317192158943

4.4 switch语句
#include <iostream>
using namespace std;

int main() {
    int weightA, weightB, weightC;
    cout << "请输入小猪A的体重:";
    cin >> weightA;
    cout << "请输入小猪B的体重:";
    cin >> weightB;
    cout << "请输入小猪C的体重:";
    cin >> weightC;

    string heaviest;
    if (weightA >= weightB && weightA >= weightC) {
        heaviest = "小猪A";
    } else if (weightB >= weightA && weightB >= weightC) {
        heaviest = "小猪B";
    } else {
        heaviest = "小猪C";
    }

    switch (heaviest[0]) {
        case '小':
            cout << "最重的小猪是" << heaviest << endl;
            break;
        default:
            cout << "没有找到最重的小猪" << endl;
            break;
    }

    return 0;
}



4.5循环结构

​ 4.5.1结构浏览
image-20240317192547410

​ 4.5.2打印数字

int main(){
    int num = 0;
    cout<<num<<endl;
    
    while(num<10){
        cout<<num<<endl;
        num++;
    }
    
    
    system("puase");
}

​ 4.5.3猜数字案例
image-20240317193127126

#include <iostream>
#include <ctime>
#include <cstdlib>

int main() {
    srand(time(0));
    int random_num = rand() % 100 + 1;//rand() % 100生成一个0--99的树
    int guess;

    std::cout << "欢迎来到猜数字游戏!系统已生成一个1到100之间的随机数,请开始猜测:" << std::endl;

    while (true) {
        std::cin >> guess;
        if (guess > random_num) {
            std::cout << "猜大了,请重新输入:" << std::endl;
        } else if (guess < random_num) {
            std::cout << "猜小了,请重新输入:" << std::endl;
        } else {
            std::cout << "恭喜你猜对了!游戏结束。" << std::endl;
            break;
        }
    }

    return 0;
}

​ 4.5.4 do while 实现

#include <iostream>
#include <ctime>
#include <cstdlib>

int main() {
    srand(time(0));
    int random_num = rand() % 100 + 1;
    int guess;
    bool isCorrect = false;

    std::cout << "欢迎来到猜数字游戏!系统已生成一个1到100之间的随机数,请开始猜测:" << std::endl;

    do {
        std::cin >> guess;
        if (guess > random_num) {
            std::cout << "猜大了,请重新输入:" << std::endl;
        } else if (guess < random_num) {
            std::cout << "猜小了,请重新输入:" << std::endl;
        } else {
            std::cout << "恭喜你猜对了!游戏结束。" << std::endl;
            isCorrect = true;
        }
    } while (!isCorrect);

    return 0;
}

​ 4.5.5水仙花数的实现
image-20240317201245061

解决办法:
image-20240317201326550

image-20240317201728843

#include <iostream>
#include <cmath>

bool is_narcissistic_number(int num) {
    int sum = 0;
    int temp = num;
    int n = std::to_string(num).length();

    while (temp > 0) {
        int digit = temp % 10;
        sum += std::pow(digit, n);
        temp /= 10;
    }

    return sum == num;
}

int main() {
    for (int i = 100; i <= 999; ++i) {
        if (is_narcissistic_number(i)) {
            std::cout << i << " 是水仙花数" << std::endl;
        }
    }

    return 0;
}

4.6 for循环

image-20240317202042282

int main(){
    for(int i = 0;i<10;i++){
        cout<<"i = "<<i<<endl;
    }
    system("pause");
}

​ 案例:敲桌子
image-20240317202327882

​ 思路:

image-20240317202439721

image-20240317202548012

​ 代码

#include <iostream>
using namespace std;

bool contains_seven(int num) {
    while (num > 0) {
        if (num % 10 == 7) {
            return true;
        }
        num /= 10;
    }
    return false;
}

bool is_multiple_of_seven(int num) {
    return num % 7 == 0;
}

int main() {
    int num;
    cout << "请输入一个数字: ";
    cin >> num;

    if (contains_seven(num) || is_multiple_of_seven(num)) {
        cout << "敲桌子" << endl;
    } else {
        cout << "不敲桌子" << endl;
    }

    return   0;
}

​ 嵌套循环
image-20240317202814435

​ 代码实现:
image-20240317203003897

​ 乘法口诀表
image-20240317203042916

​ 代码实现:

#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 9; ++i) {
        for (int j = 1; j <= i; ++j) {
            cout << j << " * " << i << " = " << i * j << "\t";
        }
        cout << endl;
    }

    return 0;
}

​ 结果:
image-20240317203649985

4.7 跳转语句

break
image-20240317203740707

#include <iostream>
using namespace std;

int main() {
    for (int i = 0; i < 10; ++i) {
        if (i == 5) {
            break; // 当i等于5时跳出循环
        }
        cout << i << " ";
    }
    cout << endl;

    for (int i = 0; i < 10; ++i) {
        if (i % 2 == 0) {
            continue; // 当i是偶数时跳过本次循环
        }
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

​ continue代码

#include <iostream>
using namespace std;

int main() {
    for (int i = 0; i < 10; ++i) {
        if (i % 2 == 0) {
            continue; // 当i是偶数时跳过本次循环
        }
        cout << i << " ";
    }
    cout << endl;

    return 0;
}

break和continue的区别:
			**break用于结束整个循环,而continue用于跳过当前迭代继续执行后续迭代**。

在编程中,breakcontinue都是控制流程的关键字,它们影响循环结构的行为。以下是两者的具体区别:

  • 作用范围:当在循环内部遇到break时,会立即退出最内层的循环,并开始执行循环之后的代码。而continue仅跳过当前的迭代,即本次循环剩余未执行的部分,然后继续进行下一次迭代。
  • 使用场景break通常用于在满足某个条件时要完全终止循环的情况。例如,你可能在一个搜索算法中找到目标值后使用break来停止搜索。continue则用于当某次迭代不满足特定条件时,希望略过此次迭代,直接进入下一次迭代的情况。比如,在遍历一个数组时,可能需要忽略某些特定的值。

总结来说,breakcontinue虽然都可以用来控制循环结构,但它们的主要区别在于break用于结束整个循环,而continue用于结束当前迭代并继续执行后续的迭代。

4.8 goto语句

C++中的goto语句是一种跳转语句,用于将程序的执行流程跳转到指定的标签位置。它的语法格式如下:

goto label;
...
label: statement;

其中,label是一个用户自定义的标签,可以是一个标识符或者一个数字。当程序执行到goto语句时,它会跳转到与该标签对应的位置,并从该位置开始执行后面的语句。需要注意的是,使用goto语句可能会导致代码结构混乱,不易于维护和调试,因此在实际编程中应尽量避免使用。

#include <iostream>
using namespace std;

int main() {
    int num = 0;
    start: // 标签
    num++;
    cout << "num: " << num << endl;
    if (num < 5) {
        goto start; // 跳转到start标签
    }
    return 0;
}

五 、数组

image-20240317204658499

5.1 数组的定义

数组是一组具有相同数据类型的元素的集合,这些元素在内存中连续存放,并且每个元素都可以通过下标来访问

数组的定义通常包括以下几个要素:

  1. 数据类型:数组中每个元素的类型,如int、float、char等。
  2. 数组名:用于标识数组的变量名。
  3. 数组大小:可以是声明时指定的常量表达式,也可以是后续动态分配的大小。
  4. 初始化:可以在声明时对数组进行初始化,也可以在声明后对数组的元素逐一赋值。
  5. 访问:通过数组名和下标来访问或修改数组中的元素。

此外,在C语言中,数组的下标是从0开始的,所以如果有一个数组a,那么a[0]表示第一个元素,a[n-1]表示最后一个元素,其中n是数组的大小。

总的来说,数组是编程中非常基础且重要的概念,它不仅用于存储数据,还常常用于处理大量数据的情况,如数值计算、数据处理等场景。

5.2 数组的操作

数组的操作主要包括以下几个方面:

  1. 访问数组元素:通过下标来访问数组中的元素,例如a[0]表示第一个元素,a[n-1]表示最后一个元素。
  2. 修改数组元素:通过下标来修改数组中的元素,例如a[0] = 10将第一个元素的值改为10。
  3. 遍历数组元素:使用循环结构来遍历数组中的所有元素,例如使用for循环或while循环。
  4. 数组排序:对数组进行排序,可以使用内置的排序函数或者自定义的排序算法。
  5. 查找数组元素:在数组中查找指定的元素,可以使用线性查找、二分查找等方法。
  6. 动态数组:根据需要动态地增加或减少数组的大小,可以使用C语言中的realloc函数或者C++中的vector容器。
5.3 代码的实现

以下是使用C语言实现数组操作的示例代码:

#include <stdio.h>

int main() {
    // 定义一个整型数组,大小为5
    int a[5] = {1, 2, 3, 4, 5};

    // 访问数组元素
    printf("a[0] = %d", a[0]); // 输出第一个元素
    printf("a[4] = %d", a[4]); // 输出最后一个元素

    // 修改数组元素
    a[0] = 10;
    printf("a[0] = %d", a[0]); // 输出修改后的第一个元素

    // 遍历数组元素
    for (int i = 0; i < 5; i++) {
        printf("a[%d] = %d", i, a[i]);
    }

    // 动态增加数组大小
    int *b = (int *)realloc(a, 10 * sizeof(int));
    if (b != NULL) {
        a = b;
        for (int i = 5; i < 10; i++) {
            a[i] = i + 1;
        }
        printf("New array: ");
        for (int i = 0; i < 10; i++) {
            printf("%d ", a[i]);
        }
        printf("");
    } else {
        printf("Failed to resize the array.");
    }

    return 0;
}

以上代码演示了如何定义、访问、修改、遍历和动态调整数组的大小。其中,realloc函数用于重新分配内存空间,如果分配成功则返回指向新内存空间的指针,否则返回NULL。

5.4 一维数组的作用

image-20240317205341713

一维数组是编程中非常基础且重要的概念,它的作用主要有以下几个方面:

  1. 存储数据:一维数组可以用于存储一组相同类型的数据,例如整数、浮点数、字符等。通过下标访问和修改数组元素,可以实现对数据的快速存取和修改。

  2. 处理大量数据:在处理大量数据时,使用一维数组可以有效地减少内存占用和提高程序运行效率。例如,在数值计算、数据处理、图像处理等领域,一维数组被广泛应用。

  3. 实现算法:许多算法需要使用到数组,例如排序算法、查找算法、动态规划等。一维数组作为这些算法的基础数据结构,能够方便地实现各种算法。

  4. 简化代码:使用一维数组可以将复杂的数据结构和操作抽象化,从而简化代码的编写和维护。例如,在字符串处理、矩阵运算等领域,一维数组可以大大简化代码的复杂度。

  5. 统计数组的大小

    以下是使用C语言实现统计数组大小的示例代码:

    #include <stdio.h>
    
    int main() {
        // 定义一个整型数组,大小为5
        int a[5] = {1, 2, 3, 4, 5};
    
        // 计算数组的大小
        int size = sizeof(a) / sizeof(a[0]);
        printf("The size of the array is %d
    ", size); // 输出数组的大小
    
        return 0;
    }
    

    以上代码中,sizeof(a)可以获取整个数组的字节数,而sizeof(a[0])可以获取数组中每个元素的字节数。将两者相除即可得到数组的大小。需要注意的是,这种方法只适用于在定义数组时已知数组大小的情况,如果数组是通过动态分配内存得到的,则需要使用其他方法来获取数组的大小。

  6. 案例一:

    1. image-20240317205936051

    2. 解析:首先需要遍历数组,找到最大值,然后打印出来。

      代码如下:

      #include <iostream>
      using namespace std;
      
      int main() {
          int arr[5] = {300, 350, 200, 400, 250};
          int max_weight = arr[0];
      
          for (int i = 1; i < 5; i++) {
              if (arr[i] > max_weight) {
                  max_weight = arr[i];
              }
          }
      
          cout << "最重的小猪体重为:" << max_weight << endl;
          return 0;
      }
      
      
      
      

案例二:

image-20240317210309164

代码实现:

​ 解析:首先需要声明一个5个元素的数组,然后通过循环将数组元素逆置。

代码如下:

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {1, 3, 2, 5, 4};

    for (int i = 0; i < 5 / 2; i++) {
        int temp = arr[i];
        arr[i] = arr[4 - i];
        arr[4 - i] = temp;
    }

    for (int i = 0; i < 5; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

总之,一维数组是编程中非常重要的数据结构之一,它不仅能够存储和处理大量数据,还能够实现各种算法和简化代码。

第二阶段:核心

第三阶段:提高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524637.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源鸿蒙】编译OpenHarmony轻量系统QEMU RISC-V版

文章目录 一、背景介绍二、准备OpenHarmony源代码三、准备hb命令3.1 安装hb命令3.2 检查hb命令 四、编译RISC-V架构的OpenHarmony轻量系统4.1 设置hb构建目标4.2 启动hb构建过程 五、问题解决5.1 hb set 报错问题解决 六、参考链接 开源鸿蒙坚果派&#xff0c;学习鸿蒙一起来&a…

【开源】SpringBoot框架开发二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

HarmonyOS NEXT应用开发—发布图片评论

介绍 本示例将通过发布图片评论场景&#xff0c;介绍如何使用startAbilityForResult接口拉起相机拍照&#xff0c;并获取相机返回的数据。 效果图预览 使用说明 通过startAbilityForResult接口拉起相机&#xff0c;拍照后获取图片地址。 实现思路 创建CommentData类&#…

vue ui 无反应解决方法

cmd 输入vue ui 无反应解决方法 在学习vuex的过程中&#xff0c;需要用到vue ui 建立项目&#xff0c;遇到的问题记录一下&#xff0c;希望能够以帮助有问题的其他人 查看vue版本 vue --version 或者 vue -V 发现vue版本才2.9.6 由于vue ui 命令需要vue3.0以上&#xff0c;…

如何实现图片上传至服务器

在绝大多数的项目中都会涉及到文件上传等&#xff0c;下面我们来说一下技术派中是如何实现原生图片上传的&#xff0c;这个功能说起来简单&#xff0c;但其实对于技术还是有考验的。图片的上传涉及到IO读写&#xff0c;一个文件上传的功能&#xff0c;就可以把IO流涉及到的知识…

Docker学习之数据管理(超详解析)

Docker存储资源类型&#xff1a; 用户在使用 Docker 的过程中&#xff0c;势必需要查看容器内应用产生的数据&#xff0c;或者需要将容器内数据进行备份&#xff0c;甚至多个容器之间进行数据共享&#xff0c;这必然会涉及到容器的数据管理&#xff1a; &#xff08;1&#xff…

网络安全之DDos攻击原理与防御

DDos简介 对于DDos(分布式拒绝服务)攻击&#xff0c;人们往往谈虎色变。它被认为是安全领域中最难解决的问题之一&#xff0c;迄今为止也没有完美的解决方案。DDos攻击是一种网络攻击方式&#xff0c;其目的是通过利用大量的互联网连接设备同时向目标网站或服务发送大量请求&a…

字母异位词分组【每日一题】

可以通过案例找到规律&#xff0c;每个词排序完后是同一个&#xff0c;所以通过hasmap存储排序过的值做key&#xff0c;值是存储单词集合。 package HasTable;import java.util.*;class Solution {static List<List<String>> groupAnagrams(String[] strs) {Map&l…

UnityShader(十六)凹凸映射

前言&#xff1a; 纹理的一种常见应用就是凹凸映射&#xff08;bump mapping&#xff09;。凹凸映射目的就是用一张纹理图来修改模型表面的法线&#xff0c;让模型看起来更加细节&#xff0c;这种方法不会改变模型原本的顶点位置&#xff08;也就是不会修改模型的形状&#xf…

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023

《论文阅读》E-CORE:情感相关性增强的移情对话生成 EMNLP 2023 前言摘要模型架构图构建边的构建和初始化节点的初始化图更新情感相关性加强解码损失函数总结前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来…

Django验证码(一)

一、介绍 1.1、概述 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序 可以防止:恶意破解密码、刷票、论坛灌水,有效防止某…

@Valid 和 @Validated 区别和使用方法

1、相关依赖 Valid 依赖包 <dependency><groupId>javax.validation</groupId><artifactId>validation-api</artifactId> </dependency>Validated的依赖包 <dependency> <groupId>org.springframework</groupId> <…

学习JavaEE的日子 Day27 手撕HashMap底层原理

Day27 1.手撕HashMap底层原理(重点) public class Test01 {public static void main(String[] args) {// Float float1 new Float("0.0f"); // Float float2 new Float("0.0f"); // Float result float1/float2; // System.out.println(result);/…

【论文阅读】DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer

DiffSpeaker: 使用扩散Transformer进行语音驱动的3D面部动画 code&#xff1a;GitHub - theEricMa/DiffSpeaker: This is the official repository for DiffSpeaker: Speech-Driven 3D Facial Animation with Diffusion Transformer paper&#xff1a;https://arxiv.org/pdf/…

【SQL】1174. 即时食物配送 II (窗口函数row_number; group by写法;对比;定位错因)

前述 推荐学习&#xff1a; 通俗易懂的学会&#xff1a;SQL窗口函数 题目描述 leetcode题目&#xff1a;1174. 即时食物配送 II 写法一&#xff1a;窗口函数 分组排序&#xff08;以customer_id 分组&#xff0c;按照order_date 排序&#xff09;&#xff0c;窗口函数应用。…

从零自制docker-4-【PID Namespace MOUNT Namespace】

文章目录 PID namespace代码mountnamespace通俗理解代码 PID namespace 每个命名空间都有独立的PID空间&#xff0c;即每个命名空间的进程都由一开始分配。 新建立的进程内部进程ID为1 代码 package main import ("log""os/exec""os""sy…

pyspark基础 -- DataFrame的理解与案例

DataFrame(df)介绍 datafram就是一个内存中的二维表结构&#xff0c;具备表结构的三个基本属性&#xff1a; 行列表结构描述 在结构层面&#xff0c;pyspark中的StructType对象描述了表结构&#xff0c;StructField对象描述了表的一个列信息&#xff1b;在数据层面&#xff…

银行信息系统应用架构导论-引用

一级目录二级目录金融标准和参考文档一、银行企业级应用系统架构规划企业级应用系统架构规划《金融科技发展规划&#xff08;2022-2025年&#xff09;&#xff08;2022年1月中国人民银行印发&#xff09;》 《关于银行业保险业数字化转型的指导意见&#xff08;2022年1月中国银…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中&#xff0c;可以通过多种方法来查看版本号。以下是几种常用的方法&#xff1a; 使用cat命令查看/etc/centos-release文件&#xff1a; CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容&#xff0c;从而获得C…

ThingsBoard初始化数据库Postgres

视频教程&#xff1a; ThingsBoard初始化数据库postgres_哔哩哔哩_bilibilihingsBoard是一个基于Java的开源物联网平台&#xff0c;旨在实现物联网项目的快速开发、管理和扩展。本课程主要从0到1带你熟悉ThingsBoard&#xff0c;学习优秀的物联网变成思维与思想&#xff0c;主…