C语言进阶 11.结构体

C语言进阶 11.结构体

文章目录

  • C语言进阶 11.结构体
    • 11.1. 枚举
    • 11.2. 结构类型
    • 11.3. 结构与函数
    • 11.4. 结构中的结构
    • 11.5. 类型定义
    • 11.6. 联合
    • 11.7. PAT
      • 11-0. 平面向量加法(10)
      • 11-1. 通讯录的录入与显示(10)

11.1. 枚举

  • 常量符号化:

    • 用符号而不是具体的数字表示程序中的数字
      • const int red = 0;
      • const int yellow = 1;
      • const int green = 2;
  • 枚举:

    • 用枚举而不是定义独立的const int变量

      • enum COLOR { RED, YELLOW, GREEN };//0 1 2
    • 枚举是一种用户定义的数据类型, 它用关键字enum以如下语法来声明:

      • enum枚举类型名字{ 名字0, …, 名字n };
    • 枚举类型名字通常并不真的使用, 要用的是在打括号里的名字, 因为它们就是常量符号, 它们的类型是int, 值则依次从0到n, 如:

      • enum colors { red, yellow, green };//三个常量, red是0, yellow是1, green是2
    • 当需要一些可以排列起来的常量值时, 定义枚举的意义就是给了这些常量值名字

    • 枚举类型可以跟上enum作为类型

      • void f(enum COLOR c);
    • 它是以整数来做内部计算和外部输入输出的

  • 套路: 自动计数的枚举:

    • 这样需要遍历所有的枚举量或者建立一个用枚举量做下标的数组的时候就很方便了
      • enum COLOR { RED, YELLOW, GREEN, NumCOLORS };//NumCOLORS就表示这个枚举有多少个量
      char* ColorNames[NumCOLORS] = {"red","yellow","green",
      };
      
  • 枚举量:

    • 声明枚举量的时候可以指定值
      • enum COLOR { RED = 1; YELLOW, GREEN = 5 };//1 2 5
  • 枚举只是int:

    • 即使给枚举类型的变量赋不存在的整数值也没有任何的warning或error
      • enum COLOR RED = 3;
  • 枚举:

    • 虽然枚举类型可以当作类型使用, 但是实际上很(bu)少(hao)用

    • 如果有意义上排比的名字, 用枚举比const int方便

    • 枚举比宏(macro)好, 因为枚举有int类型

#include <stdio.h>const int red = 0;
const int yellow = 1;
const int green = 2;enum COLOR { RED, YELLOW, GREEN };//0 1 2void f(enum COLOR c);int main(int argc, char const* argv[]) {int color = -1;scanf("%d", &color);char* colorName = NULL;printf("%d %d %d\n", RED, YELLOW, GREEN);switch (color) {case RED: colorName = "red"; break;case YELLOW: colorName = "yellow"; break;case GREEN: colorName = "green"; break;default: colorName = "unknown"; break;}printf("%s\n", colorName);return 0;
}
#include <stdio.h>enum COLOR { RED, YELLOW, GREEN, NumCOLORS };int main(int argc, char const* argv[]) {int color = -1;char* ColorNames[NumCOLORS] = {"red","yellow","green",};char* colorName = NULL;scanf("%d", &color);if (color >= 0 && color < NumCOLORS) {colorName = ColorNames[color];}else {colorName = "unknown";}printf("%s\n", colorName);return 0;
}

11.2. 结构类型

  • 声明结构类型:

    • 一个结构就是一个复合的数据类型, 里面可以有各种不同类型的成员, 用一个变量来表达它们
      struct date {	//一个结构可以有多个成员int month;int day;int year;//成员变量 
      };	//初学者最常见的错误: 漏了这个分号
      
  • 在函数内/外?

    • 和本地变量一样, 在函数内部声明的结构类型只能在函数内部使用
    • 所以通常在函数外部声明结构类型, 这样就可以被多个函数所使用了
  • 声明结构的形式:

      1. struct point{
        int x;
        int y;
        };
        struct point p1, p2;
      • p1和p2都是point里面有x和y的值
      1. struct {
        int x;
        int y;
        } p1, p2;
      • p1和p2都是一种无名结构, 里面有x和y
      1. struct point {
        int x;
        int y;
        } p1, p2;
      • p1和p2都是point里面有x和y的值
    • 第一和第三种形式, 都声明了结构point并定义了两个变量, 而第二种形式没有声明point

  • 结构变量:

    • struct date today; //定义结构变量

    • today.month = 07; //给变量赋值
      today.day = 31;
      today.year = 2014;

  • 结构的初始化:

    • struct date today = { 07, 31, 2014 };
    • struct date today = { .month = 07, .year = 2014 };//.day没有初始化, 和数组初始化一样, 默认为0
  • 结构成员:

    • 结构和数组有点像, 数组当中有很多的单元, 而结构当中有很多的成员, 不同的是, 数组当中的单元只能是相同类型的, 而结构当中的成员可以是不同类型的

    • 数组用[]运算符和下标访问其成员

      • a[0] = 10;
    • 结构用.运算符和名字访问其成员
      today.day
      today.month
      today.year

  • 结构运算:

    • 要访问整个结构, 直接用结构变量的名字

    • 对于整个结构, 可以做赋值, 取地址, 也可以传递给函数参数

      	p1 = (struct point){5, 10};//相当于p1.x = 5; p1.y = 10;p1 = p2;	//相当于p1.x = p2.x; p1.y = p2.y;
      
  • 结构指针:

    • 和数组不同, 结构变量的名字并不是结构变量的地址, 必须使用&运算符
      • struct date* pDate = &today;
#include <stdio.h>struct date {	//声明结构类型int month;int day;int year;
};
struct point {int x;int y;
};
int main(int argc, char const* argv[]) {struct date today = { 07, 31, 2014 };	//定义结构变量today.month = 07;	//访问结构成员today.day = 31;today.year = 2014;today = (struct date){ 07, 31, 2014 };//类型转换struct date day;day = today;	//结构变量给结构变量赋值, 而数组是不能这样做的day.year = 2015;struct date* pDate = &today;printf("Today's date is %i-%i-%i.\n", today.year, today.month, today.day);printf("day's date is %i-%i-%i.\n", day.year, day.month, day.day);printf("address of today is %p\n", pDate);return 0;
}

11.3. 结构与函数

  • 没听懂

  • 结构作为函数参数:

    • int numberOfDays(struct date d)

    • 整个结构可以作为参数的值传入函数

    • 这时候是在函数内新建一个结构变量, 并复制调用者的结构的值

    • 也可以返回一个结构

    • 这与数组是完全不同的

  • 输入结构:

    • 没有直接的方式可以一次scanf一个结构

    • 如果我们打算写一个函数来读入结构

    • 但是读入的结构如何送回来呢?

    • 记住C在函数调用时是传值的

      • 所以函数中的p与main中的y是不同的

      • 在函数读入了p的数值之后, 没有任何东西回到main, 所以y还是{0,0}

    • 解决方案:

      • 之前的方案, 把一个结构传入了函数, 然后再函数中操作, 但是没有返回回去

        • 问题在于传入函数的是外面那个结构的克隆体, 而不是指针
          • 传入结构和传入数组是不同的
      • 在这个输入函数中, 完全可以创建一个临时的结构变量, 然后把这个结构返回给调用者

  • 结构指针作为参数:

    • C语言经典教材<<K & R>>说过(p.131)
      • If a large structure is to be passed to a function, it is generally more efficient to pass a pointer than to copy the whole structure.
      • 传一个结构给函数的时候, 应该传指针, 而不是整个结构
  • 指向结构的指针:

    • 用->表示指针所指的结构变量中的成员

    • (*p).month = 12;

    • p->month = 12;//这个写法更简洁, ->读作arrow

    • 有了这个运算符之后, 就可以将3当中实现的代码修改

  • 输入今天的日期, 打印明天的日期

#include <stdio.h>
#include <stdbool.h>struct date {int month;int day;int year;
};bool isLeap(struct date d);
int numberOfDays(struct date d);int main(int argc, char const* argv[]) {struct date today, tomorrow;printf("Enter today's date (mm dd yyyy):");scanf("%i %i %i", &today.month, &today.day, &today.year);if (today.day != numberOfDays(today)) {tomorrow.day = today.day + 1;tomorrow.month = today.month;tomorrow.year = today.year;}else if (today.month == 12) {tomorrow.day = 1;tomorrow.month = 1;tomorrow.year = today.year + 1;}else {tomorrow.day = 1;tomorrow.month = today.month + 1;tomorrow.year = today.year;}printf("Tomorrow's date is %i-%i-%i.\n", tomorrow.year, tomorrow.month, tomorrow.day);return 0;
}int numberOfDays(struct date d) {int days;const int daysPerMonth[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };if (d.month == 2 && isLeap(d)) {days = 29;}else {days = daysPerMonth[d.month - 1];}return days;
}bool isLeap(struct date d) {bool leap = false;if ((d.year % 4 == 0 && d.year % 100 != 0) || d.year % 400 == 0) {leap = true;}return leap;
}
  • 方案一完成入读结构的功能, 行不通
#include <stdio.h>struct point {int x;int y;
};void getStruct(struct point);
void output(struct point);int main(void) {struct point y = { 0,0 };getStruct(y);output(y);
}void getStruct(struct point p) {scanf("%d", &p.x);scanf("%d", &p.y);printf("%d, %d\n", p.x, p.y);
}
void output(struct point p) {printf("%d, %d\n", p.x, p.y);
}
方案二
#include <stdio.h>struct point {int x;int y;
};struct point getStruct(void);
void output(struct point);int main(int argc, char const* argv[]) {struct point y = { 0,0 };y = getStruct();output(y);
}struct point getStruct(void) {struct point p;scanf("%d", &p.x);scanf("%d", &p.y);printf("%d, %d\n", p.x, p.y);return p;
}
void output(struct point p) {printf("%d, %d\n", p.x, p.y);
}
  • ->运算符
#include <stdio.h>struct date {int month;int day;int year;
}myday;int main(void) {struct date* p = &myday;(*p).month = 12;p->month = 12;printf("%i\n", (*p).month);printf("%i\n", p->month);return 0;
}
  • 修改后
#include <stdio.h>struct point {int x;int y;
};struct point* getStruct(struct point* p);
void output(struct point);
void print(const struct point* p);int main(int argc, char const* argv[]) {struct point y = { 0,0 };getStruct(&y);output(y);output(*getStruct(&y));print(getStruct(&y));*getStruct(&y) = (struct point){ 1,2 };
}struct point* getStruct(struct point* p) {scanf("%d", &p->x);scanf("%d", &p->y);printf("%d, %d\n", p->x, p->y);return p;
}
void output(struct point p) {printf("%d, %d\n", p.x, p.y);
}
void print(const struct point* p) {printf("%d, %d\n", p->x, p->y);
}

11.4. 结构中的结构

  • 没听懂
  • 结构数组:
    struct date dates[100];
    struct date dates[] = {{4,5,2005}, {2,4,2005}
    }
    
  • 结构中的结构:
    	struct dateAndTime{struct date sdate;struct time stime;};
    
#include <stdio.h>struct time {int hour;int minutes;int seconds;
};struct time timeUpdate(struct time now);int main(void) {struct time testTimes[5] = {{11,59,59}, {12,0,0},{1,29,59},{23,59,59},{19,12,27}};return 0;
}
struct time timeUpdate(struct time now) {}

11.5. 类型定义

  • 自定义数据类型(typedef):

    • C语言提供了一个typedef的功能来声明一个已有的数据类型的新名字, 改善了程序的可读性, 比如:

      • typedef int Length;
      • 使得Length成为int类型的别名
    • 这样, Length这个名字就可以代替int出现在变量定义和参数声明的地方了:

      • Length a,b,len;
      • Length numbers[10]; //但是这样感觉比原来还复杂, 所以typedef就用在定义结构的别名时使用就可以
typedef struct {int month;int day;int year;} mydate;	//这里是没有名字的struct, mydate是struct的别名
#include <stdio.h>typedef struct date {int month;int day;int year;
} mydate;	//在typedef和最后的单词中间的东西都是原来的, 最后的单词mydate是struct date的别名int main(int argc, char const* argv[]) {typedef int Length;Length a, b, len;Length numbers[10];mydate d = { 9, 1, 2005 };return 0;
}

11.6. 联合

  • 联合(union):

    	union AnEit {int i;char c;} elt1, elt2;
    
    • 这个结构中有两个成员i和c, 对于是struct, i和c的值是分开的, 随时都可以使用其中的 任何一个, 而对于union, i和c是联合的, 它们都占据了相同的内存空间

    • 联合: 所有的成员共享一个空间, 同一时间只有一个成员是有效的, union的大小是其最大的成员

  • union的用处:

    • 通过这个方法可以得到一个int或者double或者其它类型的内部的各个字节
#include <stdio.h>union AnEit {int i;char c;
} elt1, elt2;int main(int argc, char const* argv[]) {elt1.i = 4;elt2.c = 'a';elt2.i = 0xDEADBEEF;return 0;
}
  • union的用处:
#include <stdio.h>typedef union {int i;char ch[sizeof(int)];
} CHI;int main(void) {CHI chi;int i;chi.i = 1234;	//0x04D2for (i = 0; i < sizeof(int); i++) {printf("%02hhX", chi.ch[i]);	//小端:000004D2	大端:D2040000}printf("\n");return 0;
}

在这里插入图片描述

11.7. PAT

  • 11-0. 平面向量加法(10)

    • 疑问:

      • 如果处理这个功能: 不能输出-0.0

      • fabs()函数:

        • 返回某一个值的绝对值
        • #include <math.h>
    • 本题要求编写程序,计算两个二维平面向量的和向量。

    • 输入格式:
      输入在一行中按照“x1 y1 x2 y2”的格式给出两个二维平面向量V1=(x1, y1)和V2=(x2, y2)的分量。

    • 输出格式:
      在一行中按照“(x, y)”的格式输出和向量,坐标输出小数点后1位(注意不能输出-0.0)。

    • 输入样例:
      3.5 -2.7 -13.9 8.7

    • 输出样例:
      (-10.4, 6.0)

  • 看着答案完成的处理-0.0功能

#include <stdio.h>
#include <math.h>//声明结构类型
struct xiangLiang {double x;double y;
} xY, Xy; //定义结构变量int main() {//引用结构成员进行输入scanf("%lf %lf %lf %lf", &xY.x, &xY.y, &Xy.x, &Xy.y);//结果变量double resultX = xY.x + Xy.x;double resultY = xY.y + Xy.y;//判断-0.0的情况if (fabs(resultX) < 0.05) {resultX = fabs(resultX);}if (fabs(resultY) < 0.05) {resultY = fabs(resultY);}printf("(%.1f, %.1f)\n", resultX, resultY);//求和并输出//printf("(%.1f, %.1f)\n", xY.x + Xy.x, xY.y + Xy.y);return 0;
}
  • 答案
答案
#include <stdio.h>
#include <math.h>
#define EPSILON 0.05struct Vector {double x;double y;
};int main(void)
{struct Vector v1, v2, v3;scanf("%lf %lf %lf %lf", &v1.x, &v1.y, &v2.x, &v2.y);v3.x = v1.x + v2.x;v3.y = v1.y + v2.y;if(fabs(v3.x) < EPSILON)v3.x = fabs(v3.x);if(fabs(v3.y) < EPSILON)v3.y = fabs(v3.y);printf("(%.1f, %.1f)\n", v3.x, v3.y);return 0;
}
  • 11-1. 通讯录的录入与显示(10)

    • 疑问:

      • 如何查询记录编号?

      • 已解决, 通过结构数组的方式将输入的结构成员信息和输入的记录编号存放起来, 遍历数组, 使用下标和.访问数组和结构中的单元和成员, 打印输出

    • 通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

    • 输入格式:
      输入在第1行给出正整数N(<=10);随后N行,每行按照格式“姓名 生日 性别 固话 手机”给出一条记录。其中“姓名”是不超过10个字符、不包含空格的非空字符串;生日按“yyyy/mm/dd”的格式给出年月日;性别用“M”表示“男”、“F”表示“女”;“固话”和“手机”均为不超过15位的连续数字,前面有可能出现“+”。
      在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N-1顺序编号)。数字间以空格分隔。

    • 输出格式:
      对每一条要查询的记录编号,在一行中按照“姓名 固话 手机 性别 生日”的格式输出该记录。若要查询的记录不存在,则输出“Not Found”。

    • 输入样例:
      3
      Chris 1984/03/10 F +86181779452 13707010007
      LaoLao 1967/11/30 F 057187951100 +8618618623333
      QiaoLin 1980/01/01 M 84172333 10086
      2 1 7

    • 输出样例:
      LaoLao 057187951100 +8618618623333 F 1967/11/30
      Not Found

  • 看着答案写的

#include <stdio.h>struct tongXunLu {//朋友的姓名、出生日期、性别、固定电话号码、移动电话号码char name[10];struct birthday {int year;int month;int day;} date;char sex;char guHua[15];char phone[15];
};int main(int argc, char const* argv[]) {//定义结构变量struct tongXunLu inf[10];//输入nint n;scanf("%d", &n);//循环输入n次int i;for (i = 0; i < n; i++) {//输入信息scanf("%s %i/%i/%i %c %s %s", &inf[i].name, &inf[i].date.year, &inf[i].date.month, &inf[i].date.day, &inf[i].sex, &inf[i].guHua, &inf[i].phone);}//输入kint k;scanf("%d", &k);//输入k个整数//num[i]表示查询的记录编号int num[10];for (i = 0; i < k; i++) {scanf("%d", &num[i]);}for (i = 0; i < k; i++) {if (num[i] >= 0 && num[i] < n) {//姓名 固话 手机 性别 生日printf("%s %s %s %c %i/%i/%i\n", inf[num[i]].name, inf[num[i]].guHua, inf[num[i]].phone, inf[num[i]].sex, inf[num[i]].date.year, inf[num[i]].date.month, inf[num[i]].date.day);}else {printf("Not Found\n");}}return 0;
}
  • 答案
#include <stdio.h>
#define N 10struct Person {char name[11];char birthday[11];char sex;char fixed[17];char mobile[17];
};int main(void){struct Person p[N];int num[N];int i, n, k;scanf("%d", &n);for (i = 0; i < n; ++i){scanf("%s %s %c %s %s", &p[i].name, &p[i].birthday,&p[i].sex, &p[i].fixed, &p[i].mobile);}scanf("%d", &k);for (i = 0; i < k; ++i) {scanf("%d", &num[i]);}for(i = 0; i < k; ++i) {if (num[i] >= 0 && num[i] < n) {printf("%s %s %s %c %s\n", p[num[i]].name, p[num[i]].fixed, p[num[i]].mobile, p[num[i]].sex, p[num[i]].birthday);}else {printf("Not Found\n");}}return 0;
}

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

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

相关文章

【C++深度探索】AVL树与红黑树的原理与特性

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 前言 前…

渣土车与搅拌车安全问题解析及智能监控解决方案

一、背景分析 近年来&#xff0c;渣土车在货物运输中由于超载超速、违规驾驶、车辆盲区过大等问题导致的事故频发&#xff0c;严重影响了人们的生命财产安全。而搅拌车作为一种特殊的运输车辆&#xff0c;在混凝土输送过程中也存在类似的隐患。针对这些问题&#xff0c;对搅拌…

多维矩阵乘积运算和对应的广播机制

神经网络中的多维矩阵乘积运算&#xff1a; 遵循的原则是&#xff1a; 两张量前两维度应该是相同的&#xff0c;如果不同则其中一张量维度为1。 如果有论文中有遇到矩阵乘积的两项维度不一致&#xff0c;那就考虑它计算时是使用了广播机制&#xff08;如YOLACT&#xff09;。…

谁说只有车载HMI界面?现在工业类的HMI界面UI也崛起了

谁说只有车载HMI界面&#xff1f;现在工业类的HMI界面UI也崛起了 引言 艾斯视觉作为行业ui设计和前端开发领域的从业者&#xff0c;其观点始终认为&#xff1a;工业自动化和智能化水平不断提高&#xff0c;人机界面&#xff08;Human-Machine Interface&#xff0c;简称HMI&a…

Lombok的认识

Lombok的作用 Lombok是一个Java库&#xff0c;它可以通过简单的注解形式来帮助开发人员简化Java代码的编写&#xff0c;特别是减少模板代码的书写。具体来说&#xff0c;Lombok的主要作用包括&#xff1a; 减少模板代码&#xff1a;Lombok可以通过注解自动生成getter、setter、…

QT opencv常用代码备忘

最近在了解qt opencv的一些用法&#xff0c;把常用的代码记下来方便需要时复制使用 在默认.pro文件加入opencv包含路径和库文件 QT core guigreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c17# You can make your code fail to compile if it uses deprecate…

网络钓鱼抓肉鸡实验

实验背景 网络钓鱼&#xff0c;攻击一台服务器或普通主机时&#xff0c;很可能会将这台服务器或主机变成“傀儡机”&#xff0c;帮助它攻击其它的主机&#xff0c;以达到窃取更多信息、组建僵尸网络、DDOS攻击等目的&#xff0c;危害性极大 其中僵尸网络&#xff08;Botnet&a…

运维锅总详解NFS

NFS是什么&#xff1f;如何对NFS进行部署及优化&#xff1f;NFS工作流程是什么&#xff1f;NFS的性能及优缺点是什么&#xff1f;NFS发展历史又是怎样的&#xff1f;希望本文能帮您解答这些疑惑&#xff01; 一、NFS简介 NFS (Network File System) 是由 Sun Microsystems 在…

rem实现屏幕适配(jQuery)

一、rem换算 1.根据视口宽度动态计算字体大小&#xff0c;如果宽度大于750px&#xff0c;则将字体大小设置为100px&#xff0c;否则按比例缩小。 tips:使用时记得引入jQuery.js // 在文档加载完成后执行函数&#xff0c;确保DOM已经准备就绪$(function () {// 定义一个自执行…

二叉树详解-第四篇 二叉树链式结构的实现

目录 1.二叉树的遍历 1.1前序遍历&#xff1a; 1.2 中序遍历&#xff1a; 1.3 后序遍历&#xff1a; 2.二叉树链式结构的实现 2.1 Tree.h 2.2 Tree.cpp 2.2.1 前序遍历 void PreOrder(TNode* Root) 2.2.2 中序遍历 void InOrder(TNode* Root) 2.2.3 后序遍历 void Bac…

【Python实战因果推断】58_因果推理概论8

目录 Identifying the Treatment Effect The Independence Assumption Identification with Randomization Identifying the Treatment Effect 现在你已经理解了问题所在&#xff0c;接下来该看看解决方案&#xff08;至少是一个解决方案&#xff09;了。识别&#xff08;i…

聊一聊知识图谱结合RAG

因为最近在做一些关于提高公司内部使用的聊天机器人的回答准确率&#xff0c;并且最近微软官方也是开源了一下graphrag的源码&#xff0c;所以想聊一聊这个知识图谱结合rag。 rag在利用私有数据增强大模型回答的领域是一种比较典型的技术&#xff0c;也就是我们提出问题的时候&…

网站漏洞扫描软件Burp suite和Xray安装应用及联合使用

目录 1、网站漏洞扫描软件应用-Burp suite 01 burp 扫描工具使用介绍&#xff1a; 02 burp 扫描工具安装过程&#xff1a; 1&#xff09;获取扫描工具程序包 2&#xff09;安装部署扫描工具 3&#xff09;bp安装完毕的基础设置&#xff1a; 3.1&#xff09;抓取浏览器访…

免费使用正版的Typora教程

1.来到Typora官网下载安装。 Typora官网: https://typoraio.cn/ 2.激活主程序 编辑修改Typora安装目录下文件 下面展示文件目录路径 &#xff1a; D:\SoftWare\Typora1.9.5\resources\page-dist\static\js\LicenseIndex.180dd4c7.4da8909c.chunk.js查找&#xff1a;e.hasAc…

huggingface里的模型如何下载呢?

HF-Mirror加速访问Hugging Face的门户。作为一个公益项目,我们致力于提供稳定、快速的镜像服务,帮助国内用户无障碍访问Hugging Face的资源。https://hf-mirror.com/ pip install -U huggingface_hub export HF_ENDPOINT=https://hf-mirror.com huggingface-cli download

别再浪费时间,快速实施项目管理软件的技巧

国内外主流的10款项目进度管理软件对比&#xff1a;PingCode、Worktile、蓝凌OA、用友、泛微OA、飞书、Asana、Trello、Smartsheet、Jira。 在快节奏的商业环境中&#xff0c;有效地管理项目进度常常是团队成功与否的关键。许多团队面临着项目管理过于复杂&#xff0c;难以迅速…

04 卷积神经网络

目录 1. 基本概念 1.1 卷积神经网络 1.2 卷积 1.3 汇聚&#xff08;池化&#xff09; 2. CNN网络架构及参数学习 2.1 网络架构 2.2 参数学习 3. 典型的卷积神经网络 3.1 LeNet-5 3.2 AlexNet 3.3 Inception网络 3.4 残差网络 4. 其他卷积方式 1. 基本概念 1.1 …

ElasticSearch搜索

ES搜索 elastic search 一套搜索引擎技术,主要技术栈包括 Elasticsearch&#xff1a;用于数据存储、计算和搜索 Kibana&#xff1a;用于数据可视化 在数据库模糊查询中,因为不走索引,所以效率很低,而在搜索引擎中,不仅效率高,而且即使出现个别错字,或者用拼音搜索,甚至用同…

LeetCode Hot100 搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

本地化部署Chatglm和防踩坑攻略

最近想搞点什么东西练练手&#xff0c;传统crud又没有意义&#xff0c;于是就看到了给介绍AI的文章&#xff0c;然后就慢慢自己摸索&#xff0c;从0到1&#xff0c;独自部署应用。 项目简介 ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的对话预训练模型。ChatGLM3-6B 是…