0

点赞

0

回复

174

浏览

C/C++头文件相互包含的编译问题

1 问题描述 两个类Class Message和Class Folder分别定义在两个不同的头文件Message.h和Folder.h中,然后类成员函数的实现分别在Message.cpp和Folder.cpp文件中,两个文件分别编译为.o文件,与main.cpp文件合并编译链接为可运行的二进制文件。代码如下所示: / Message.h /...

c++c编译头文件

0

点赞

0

回复

107

浏览

C++关联容器

1 基本介绍 关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的,与之对应的,顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的。 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。 标准库提供8个关联容器,其不同体现在三个维度上 1. 是set/map 2. 是否要求不重复的关键字,如果允许重复关键字,容器开头包含multi 3. 是否按顺序保存元素,或无须保存,不保持关键字按顺序存储的容器都以单词Unordered开头 1.1 MAP/SET 关联容器 特征 map 关联数组:保存key value,key不可重复 set 关键字即是值,只保存关键字的容器,key不可重复 multimap 关键字可重复出现的map,有序 multiset 关键字可重复出现的set,有序 unordered_map 用哈希函数组织的map unordered_set 用哈希函数组织的set unordered_multimap 哈希组织的map,关键字可以重复出现 unordered_multiset 哈希组织的set,关键字可以重复出现 include ...

c++关联容器容器

0

点赞

0

回复

558

浏览

泛型程序设计

1 泛型程序设计 泛型程序设计就是要把程序写得尽可能通用,同时不损失效率。泛型程序设计的首要目标是标准容器,进而是标准算法,总的目标是最通用、最有效、最灵活地表现概念。 泛型程序设计方法不是面向对象程序设计方法的一部分,他有着面向对象方法不同的设计技术。STL便是反省程序设计的一个良好的范例。标准C++类库包含的组件即支持面向对象的设计与编程,又支持泛型程序设计。 为什么泛型程序设计思想首先用C++在STL中得以实现呢?因为C++的模板为泛型程序设计奠定了关键的基础,他是所有版本STL的基石,有了模板就能够编写通用的类模板、函数模板等等。模板为软件业数十年来的奋斗目标——软件复用打下了基础。 面向对象的程序设计思想,应该是将数据与操作数据的函数封装起来。但是是否有更好的方案呢?泛型程序设计的思想是,将算法从特定的数据结构中抽象出来,让算法成为通用的,可以作用于各种不同的数据结构,这样就不必为每种容器都编写一套同样的算法。当容器类模板修改、扩充时也不必重写大量算法函数。 所以,标准模板库(STL)是C++标准程序库的核心,它采用了泛型程序设计思想,深刻影响了标准程序库的整体结构和组成。从应用角度去看,构建STL框架最关键的4个组件是容器、迭代器、算法和函数对象,关系为: 迭代器是算法和容器类之间的桥梁,算法通过迭代器从容器中获取元素,然后将获取的元素传递给特定的函数对象进行操作,最后讲处理后的结果储存到容器中。 2 STL(标准模板库) 2.1 容器 容器类是容纳、包含一组元素或元素集合的对象。容器类中包含一组元素或一个元素集合,作为通用元素收集器。包括两类:异类容器类 & 同类容器类 容器类库中包括7种基本容器:向量、双端队列、列表、集合、多重集合、映射、多重映射,可以分为两类 类型 类型成员 类型特征 顺序容器 vector\deque\list 将一组具有相同类型的元素以严格的线性形式组织起来 关联容器 set\multiset\map\multimap 具有根据一组索引快速提取元素的能力2.2 适配器 容器适配器是用来扩展7中基本容器的,是修改和调整其他类接口的类。他们不提供存放数据的实际数据结构的实现方法,而且容器适配器也不支持迭代器。 基本容器与适配器结合产生了新的具有特定特性的容器。 适配器 默认基础数据结构 标准栈容器 dqueue 标准队列容器 Queue容器2.3 迭代器 迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法。实际上指针也是一种迭代器。迭代器可以调用next()和previous()等成员函数便利容器。 问:为什么要存在迭代器? 答:迭代器是算法和容器的中间人。在STL中,容器是封装起来的类模板,内部结构无从知晓。而STL中的算法是通用的函数模板,并不专门针对哪一个容器类型,那么想想这个问题:算法要是用于多种容器,而每一种容器中存放的元素又可以是任何类型,如何用普通的指针或下标来充当终结呢?使用指针需要知道其指向的元素类型,使用下标需要在相应的容器中定义过下标操作服,但是不是每个容器都有下标操作符的。这时就必须使用更为抽象的指针,这就是迭代器。简而言之,算法函数可以访问容器中指定位置的元素,而无需关心元素的具体类型。 2.4算法 算法的重要特性就是统一性,并且可以广泛用于不同的对象和内置的数据类型,包括四种 算法 特征 非可变序列算法 算法对容器进行操作不会改变容器内容 可变序列算法 会改变容器内容 排序相关算法 包括排序算法、合并算法、二分查找算法等 通用数值算法 数量较少 ...

泛型c++标准模板库

0

点赞

1

回复

830

浏览

敏捷课程总结报告 - 辣个表情

项目立意 有个段子大家可能听说过,“不要问我的理想工作是什么,我的理想是不用工作”。虽然很消极,但是反映出了现在社会绝大多数人的思想。这也是正常的,对于大部分人来说,生活的主旨是让自己能活下去,然后是过得舒服过得愉快,最后才是为他人创造些什么。 所以现在真正赚钱的所谓IP,面对的主要人群都是这样的、绝大多数的人,手游、电影、电视,都是这样。大时代是如此,特别的,在这个大时代中,有一小支文化也同样在发展壮大,就是所谓的“宅”文化。 大家可能会觉得宅文化是一个小圈子,但是实际上它覆盖的范围是相当大,从早点的ACG,也就是动画漫画游戏,拓展到了今天的ACGN,新加了小说,所以从广义上来说,我们都是宅文化的一员。 于此同时,“宅”的定义也在逐渐拓展,更多的被用来表示对某一个事物的喜好者组成的群体,这是由于互联网时代的特征造成的,放在过去你喜欢一个什么东西,你就参加社团,现在呢,只需要老老实实待在家里,通过网络就可以获取你想要的一切。 “宅”文化不像体育运动那样是一个互相的过程,主要是制作者向消费者单方面的灌输内容,那么对于消费者来说,这样的内容灌输是不够的。动画更新了、小说连载了、电影上映了,看完了,不过瘾,下一集还要等或者就干脆没有了,怎么办?看完之后,感动了、不满了、困惑了,怎么办?所以我们会看到,电影播完之后各种地方开始吐槽,动漫更新后视频上各种弹幕飞过,QQ群,论坛更是不用多说,在这个过程里,作品得到了充分的诠释,观众得到了满足,社交平台得到了流量,可谓是皆大欢喜。 而在交流的过程中,有相当一部分,当然是偏灌水的那一部分,是由表情完成的。这其中有两个原因:首先,单纯的文字是平淡而单调的,“干嘛”两个字根据不同的语音语调可以演绎出许多种不同的意思,更不用说那个我们大家都懂的字了其次,如果你只是想要表达你现在的想法,文字反倒麻烦了,一个简单的表情就能够精确、方便、快捷的表达你内心的想法 说了这么多?那么需求到底是什么呢?我们的根本需求来源于这样的一个因素:表情(通常是QQ表情)只能够存在本地!这就造成了巨大的问题——对于自己收藏的表情的管理是困难的所以对于这样的需求,我们的目标只有一个:表情云 项目目标 基本目标 搭建一个在线的表情库,支持用户上传表情,下载表情。方便用户在多台设备,不同系统环境下的表情使用。 上传&下载 多种上传方式 批量下载功能 展示 用户自定义标签 筛选 收藏 用户可以通过标签来收藏表情,便于之后的查找和使用 最近使用,方便快速的复用表情 历程回顾 项目从国庆之后开始搭建,期间一直零零散散的网上堆砌功能,大家也分头去做各自的事情,每当实现了一个相对完整的功能,就会往主分支上合并,并且立即上线。 技术方案 数据库 最开始的数据库设计包含有两个表: Expr : id , creator , extension , md5 Tag : id , content , expr_id , owner 其中省略了用户系统User和标签内容TagContent: User :在设计中才用了使用Url来包含用户ID做法,通过Url进行用户验证。一方面后台实现起来较为方便,一方面为了与客户端进行逻辑上的统一。 TagContent :以 Tag 模型中 content 域来直接进行表示但是这样的设计也产生一定的问题,在前端不能很好的进行路由,同时在统计Tag时比较麻烦。 WEB+API服务器 发现/收藏 直接将用户所有的表情以列表的形式显示,在前端才用了 React.js 进行模版渲染。 表情上传 1. 拖拽上传在使用QQ、YY等聊天工具时,可以对图片进行直接的拖拽。当将聊天框内的图片直接拖拽至记事本时,会直接转化图片缓存的地址。利用这个性质,在JavaScript设置抓取事件:当图片拖拽至对应抓取框时,通过JavaScript中 file 类获取当前图片的数据流以及本地地址。根据 file 类所存储的数据将图片对应显示于浏览器。确认上传时,将图片的地址进行传递实现了上传功能。 2. 复制上传在Windows系统中通过 Ctrl+V 进行图片复制时,剪贴板中是以数据流的格式存储的图片,特别是通过截图软件(如QQ的 Ctrl+Alt+A )截取的图片并没有直接对应的静态文件。因此在处理复制上传时需要解决的问题是数据流如何转化为文件。通过调研一些成熟的富文本编辑器,阅读其源代码,发现了可行的解决方案:利用计算机的Blob(binary large object)容器。提供了访问粘贴板中Blob二进制数据的接口 clipboardData.items ,并提供了将其转换为文件的方法 getAsFile ,通过这两个函数实现了二进制流数据的转化。 3. 打包上传利用AjaxFileUpload.js库进行文件上传,将上传的压缩包文件进行解包,分解为多个图片。目前支持Zip/Rar文件的打包上传,这两种格式压缩文件比较常见,并且有着明确的编码方式说明文件。在查找算法的过程中,发现Java自身就有这两种文件压缩解压的库,以及对应的maven包: ...

.netspringc++设计模式java

0

点赞

0

回复

783

浏览

C++对象的生命周期,构造与析构

本文总结了类的创建、复制和销毁过程中涉及到的成员函数:构造函数、析构函数、拷贝构造函数、赋值运算符等。 探讨了全局对象、静态对象、栈中的对象、堆中的对象的整个生命周期中,这些成员函数的调用时机。 类的声明 C++ http://tianmaying.com/tutorials/tag/c++ 引入类的概念来实现面向对象程序设计,先来看一个简单的类的声明: classCPerson{...

c++

0

点赞

0

回复

559

浏览

C++类的静态和常量成员

本文总结了静态成员的使用、单例的实现、常量对象与常量方法,以及如何将常量方法重载为普通方法。 静态成员 对象成员的声明前加 static 即可定义为静态成员,静态成员必须在声明类的文件中进行声明(通常会初始化),否则链接错。 访问静态成员可以通过类名,也可以通过对象名。 classCPerson{...

c++

0

点赞

0

回复

564

浏览

C++运算符重载

运算符重载就是对已有的 C++ http://tianmaying.com/tutorials/tag/c++ 运算符赋予更多的语义,让一个运算符可以作用于其他的数据类型。 典型地,让运算符接受一个类的对象作为参数。 通常有两种方式来重载一个运算符: 1. 声明一个普通函数,作为类的友元。 2. 声明为类的成员方法。 事实上,运算符的本质是函数。每个运算符调用会转换为函数调用,运算符的操作数转换为函数参数。 运算符的重载本质上是方法的重载。 这些运算符不允许重载: . , . , :: , ?: , sizeof 。 重载为普通函数 重载为普通函数时,参数的个数为运算符的目数: CPersonoperator+(constCPerson&male,constCPerson&female){...

c++

0

点赞

0

回复

507

浏览

C++虚函数与多态

C++类继承带来了诸多好处:基类代码复用、通用的方法和属性、更好的可维护性, 然而最大的好处莫过于提供统一的接口。接口是一种对类型的抽象,它统一了一系列类的行为, 不同类的对象之间交互更加容易。Java、objective C等面向对象语言都提供了接口的概念, 在C++中可以通过抽象类来模拟接口的行为。 与此同时, C++ http://tianmaying.com/tutorials/tag/c++ 通过虚函数实现了多态:通过基类指针或引用调用虚函数时,会调用当前对象的实际类型中声明的函数。 为了这个特性,包含虚函数的C++对象中会存储一个虚函数表指针,来完成动态联编。 编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数, 为此要确切知道该调用的函数,要求联编工作要在程序运行时进行, 这种在程序运行时进行联编工作被称为动态联编。 虚函数 虚函数通过 virtual 关键字来声明。 classCPerson{...

c++虚函数多态

0

点赞

0

回复

673

浏览

C++继承与封装

本文总结了 C++ http://www.example.com 中类的继承相关的概念,包括可见性级别、继承的不同方式、构造与析构过程、封闭类、友元等。 可见性级别 C++类提供了数据结构和算法的封装,以及相应的3种可见级别。它们定义了不同的可见性: Public:当前类以及子类的方法中可见,外部可见。 Protected:当前类以及子类的方法中可见,外部不可见。 Private:当前类的方法中可见,外部不可见。 在一个对象的成员函数中,可以调用其他同类对象的私有方法。 多数现代的面向对象语言中,仅提供Private和Public两种可见性,C++的可见级别略显复杂。 然而三种继承方式以及多 继承 http://tianmaying.com/tutorials/tag/继承 机制,让问题更加复杂。简单起见,此处只讨论Private和Public方式的单继承。 Public继承:子类中可访问基类 public 、 protected 成员,子类外部可见父类 public 成员。 Private继承:子类中可访问基类 public 、 protected 成员,子类外部不可见父类成员。 类的继承 Public继承表示"is a"的关系(见 Effective C++: Item 32 http://harttle.com/2015/08/30/effective cpp 32.html ),子类的对象同时也是一个基类的对象。 子类的行为应符合基类的行为,因此Public继承中通常不会覆盖基类成员。 Private继承表示“以...实现“的关系,子类是以基类来实现的 对于一个子类的对象,其外部不可见基类的行为。Private继承更像是对象组合。 对于Public继承,子类的指针、引用、变量可以直接赋值给基类的指针、引用、变量。 classCBase{};...

继承封装c++

0

点赞

0

回复

673

浏览

C++字符串处理

字符串在很多编程语言中已经成为基本数据类型,C语言中我们使用 char 来手动维护字符串的内存, 在C++中,可以使用 std::string 来方便地创建和操作字符串。 string 是一个模板类,它有 basic_string 定义: typedefbasic_string string;...

字符串c++

0

点赞

0

回复

752

浏览

C++ STL简单介绍

STL (Standard Template Library) 提供了一些常用的数据结构和算法的模板,1998年加入 C++ http://tianmaying.com/tutorials/tag/c++ 标准。 STL中有三个重要的概念: 1. 容器:容纳各种数据类型的数据结构,是一系列的类模板。 2. 迭代器:迭代器用来迭代地访问容器中的元素。 3. 算法:用来操作容器中的元素,是一系列的函数模板。 STL 容器 STL http://tianmaying.com/tutorials/tag/stl 中的容器定义在 std 命名空间下,需要引入头文件 , , , , , 等。容器可以分为三大类: 1. 顺序容器 vector http://www.cplusplus.com/reference/vector/vector :尾端插入元素有较高性能,动态数组实现; deque http://www.cplusplus.com/reference/deque/deque/ :收尾插入元素都有较高性能,动态数组实现; list http://www.cplusplus.com/reference/list/list/ :可以常数时间在任何地方插入元素,链表实现; 2. 关联容器 set http://www.cplusplus.com/reference/set/set :不同元素的集合,平衡二叉树实现,检索时间是 O(log(N)); multiset http://www.cplusplus.com/reference/set/multiset :同上,但可以包含相同元数据; map http://www.cplusplus.com/reference/map/map :同 set ,但存放的是键值对; multimap http://www.cplusplus.com/reference/map/multimap/ :同上,键可以重复; 3. 容器适配器: stack http://www.cplusplus.com/reference/stack/stack , queue http://www.cplusplus.com/reference/queue/queue , priority_queue http://www.cplusplus.com/reference/queue/priority_queue/ 。 这些容器有一些通用的方法: empty , size , swap , max_size 。前两类容器支持迭代器,称为第一类容器。 顺序容器还有以下通用方法: front , back , pop_back , push_back 。 容器之间的比较取决于第一个不等的元素;如果长度相同且所有元素相等,两个容器相等;如果一个是另一个的子序列,则较短的容器小于较长的容器。 存储键值对关联容器 map 和 multimap 的迭代器是一个 pair 的指针。 插入时,可以使用 运算符,也可以使用 insert 方法,它接受一个 pair 对象: std::map mymap;...

c++stl

0

点赞

0

回复

653

浏览

STL中的函数对象与函数指针

STL http://tianmaying.com/tutorials/tag/stl 是C++的标准模板库(standard template library),自然其中定义的都是模板。 相比于类和函数声明的显式接口(explicit interface),类模板和函数模板声明的接口属于隐式接口(implicit interface)。 因为模板参数应当满足的接口是由模板中表达式的合法性决定的,这一点给了模板很大的自由。 而函数对象和函数指针具有同样的调用语法,因此STL中这两者常常可以互换。 更多关于隐式接口和显式接口的概念和区别,参见 Effective C++: Item 41 http://harttle.com/2015/09/08/effective cpp 41.html 。 先来感受一下 C++ http://tianmaying.com/tutorials/tag/c++ 中的函数对象和函数指针: template ...

函数指针stl函数对象c++

0

点赞

0

回复

669

浏览

c++指针和引用

C++的引用和指针始终是最容易出错的地方,大量的C++错误都是由空引用和空指针造成的。 与此同时,常量指针、函数指针、数组指针也是容易产生困惑的地方。 本文便来总结一下C++中引用和指针的用法,以及智能指针的概念。 引用 引用是 C++ http://tianmaying.com/tutorials/tag/c++ 的C语言的扩充,用来定义一个变量的别名。其使用方式同被引用的变量,且可以通过参数传递引用。 引用在定义时必须初始化为一个变量,初始化为常量或表达式都会引发编译错误。 引用是一种隐式的指针,对它的操作都会被解释为对它引用的对象的操作。 引用不占用栈空间,因为编译器知道它的地址。但作为参数传递引用时,会把指针放在参数栈中。例如: voidfunction(int&x){...

指针c++引用

0

点赞

0

回复

741

浏览

c++默认参数、函数重载与可变参数

默认参数 在函数声明中可以设置若干个默认参数,这些参数在函数调用时可以省略。例如: voidprint(inta=3,intb=4){...

c++

0

点赞

0

回复

721

浏览

C++数组传参与降级行为总结

指针和数组是C++中最不直观的概念之一,而数组传参和数组指针降级则需要更加地小心。 本文便来总结一下多维数组传参的问题,以及数组指针的降级行为。本文主要介绍两个要点: 数组名在多数情况下会被降级为首元素的指针,但数组不是指针! 多维数组可以视作一个普通数组,只不过元素类型也是数组。多维数组也存在降级行为。 至于指针数组、数组指针、函数指针、常量指针和指针常量等基础性的问题, 请参见 C++手稿:指针与引用 http://harttle.com/cpp pointers and references.html 一文。 数组降级行为 多数情况下数组名会被转换为首元素的指针, 数组的这一行为称为降级(decay,degrade)。 数组降级发生在赋值时、传参时、以及函数返回时。 例如: inta 5 ;...

指针数组c++引用

新建主题 记录代码

学员动态

  • R.D完成了课程的作业
  • z**x在课程中提出了问题:老师,为什么它那个中...
  • L**z向课程作业中提交了代码
  • 天码君回复了A**i在课程中的问题:欢迎来到天码营学习,...
  • L**z向课程作业中提交了代码
  • w**3回复了L**z在课程中的问题:嗯,毕竟几乎公司和学...
  • L**z向课程作业中提交了代码
  • z**x在课程作业中回复了老师:所以说包的作用就像是...
  • L**z向课程作业中提交了代码
  • z**x在课程作业中回复了老师:入门到精通这本我今天...
  • J**y向课程作业中提交了代码
  • z**x添加了笔记:public sta...
  • 三年添加了笔记:先来定义Mapper...
  • L**z向课程作业中提交了代码
  • w**3评论了z**x在课程中的作业:这个是根据你的jav...
  • 扶**学向课程作业中提交了代码
  • A**i向课程作业中提交了代码
  • X**E向课程作业中提交了代码
  • 天码君评论了三年在课程中的作业:你的代码应该是可以跑...
  • z**x在课程中提出了问题:老师我把Java换成...
  • A**i向课程作业中提交了代码
  • 天码君回复了s**n在课程中的问题:欢迎来到天码营学习,...
  • 三年添加了笔记:分析我们的业务场景,...
  • 三年添加了笔记:接下来引入MyBat...
  • z**x在课程中提出了问题:请问下老师,安装的时...
  • w**3回复了L**z在课程中的问题:你如果要用java1...
  • L**z向课程作业中提交了代码
  • 三年添加了笔记:这里你注意两点即可:...
  • z**x在课程中提出了问题:哇,我换成课程里的压...
  • w**3回复了z**x在课程中的问题:安装java8 不要...
  • L**z在课程中提出了问题:好的那我还是装回我的...
  • J**y向课程作业中提交了代码
  • z**x在课程中提出了问题:好的老师,那版本11...
  • z**x评论了:安装的时候出现这个界...
  • A**i向课程作业中提交了代码
  • D**n在课程作业中回复了老师:这道题是什么意思? ...
  • w**3评论了D**n在课程中的作业:看清楚要求,参数表要...
  • w**3回复了z**x在课程中的问题:可以设置字体 htt...
  • z**x添加了笔记:将希望输出信息放到S...
  • 天码君回复了A**i在课程中的问题:欢迎来到天码营学习,...
  • w**3评论了z**x在课程中的作业:对的,一般是在包下的...
  • 天码君回复了c**h在课程中的问题:欢迎来到天码营学习,...
  • L**z在课程中提出了问题
  • 天码君回复了R.D在课程中的问题:欢迎来到天码营学习,...
  • 三年在课程中提出了问题:请老师解答下这课作业...
  • z**x在课程中提出了问题:老师我的电脑是64位...
  • L**z向课程作业中提交了代码
  • D**n向课程作业中提交了代码
  • L**z在课程中提出了问题:老师,刚才我换了一个...
  • 天码君回复了D**G在课程中的问题:欢迎来到天码营学习,...
  • L**z向课程作业中提交了代码
  • A**i完成了课程的作业
  • A**i向课程作业中提交了代码
  • L**z向课程作业中提交了代码
  • w**3回复了z**x在课程中的问题:百度找一下如何彻底删...
  • c**6向课程作业中提交了代码
  • c**u评论了:13课实战弄不明...
  • J**y向课程作业中提交了代码
  • w**3回复了z**x在课程中的问题:重新安装对应版本的e...
  • L**z向课程作业中提交了代码
  • 三年添加了笔记:关于MyBatis本...
  • J**y向课程作业中提交了代码
  • z**x在课程作业中回复了老师:所以说,是要先创建包...
  • J**y向课程作业中提交了代码
  • A**i向课程作业中提交了代码
  • 天码君回复了h**2在课程中的问题:欢迎来到天码营学习,...
  • 工**武在课程中提出了问题:请问为什么课程的视频...
  • 三年添加了笔记:需要修改MyBati...
  • z**x在课程作业中回复了老师:想请问下老师这行代码...
  • z**x在课程中提出了问题:对应版本?我的JDK...
  • 天码君回复了工**武在课程中的问题:欢迎来到天码营学习,...
  • A**i向课程作业中提交了代码
  • A**i向课程作业中提交了代码
  • J**y向课程作业中提交了代码
  • w**3评论了z**x在课程中的作业:...
  • L**z向课程作业中提交了代码
  • 天码君回复了z**x在课程中的问题:欢迎来到天码营学习,...
  • 天码君回复了X**E在课程中的问题:欢迎来到天码营学习,...
  • J**y向课程作业中提交了代码
  • l**o向课程作业中提交了代码
  • w**3评论了z**x在课程中的作业:这是一个类的主体部分...
  • 天码君回复了L**z在课程中的问题:欢迎来到天码营学习,...
  • w**3回复了z**x在课程中的问题:软件安装问题每个人碰...
  • 三年在课程作业中回复了老师:老师,我的代码中报这...
  • 天码君回复了D**n在课程中的问题:欢迎来到天码营学习,...
反馈意见