2022级吉林大学面向对象第一次上机测试
【注:解答全部为本人所写,仅供同学们学习时参考使用,请勿照搬抄袭!】
1、
1)略
2)如果main,f1,g1,g2或更多的函数之间有更为复杂的调用关系,头文件一般按怎样的规律写呢?
一般情况下,头文件应按照以下规律编写:
- 头文件名应与包含的函数或类名有关
- 在头文件中应包含必要的预处理指令,例如#ifndef、#define和#endif,以避免重复包含
- 应包含函数或类的声明,但不包括其定义
- 应包含其他必要的头文件,以确保在使用特定函数或类时所需的所有内容都可用
3)请总结出cpp文件与.h文件的关系,以及头文件中存放的内容。
C++中,.cpp文件包含函数或类的实现,而.h文件则包含函数或类的声明。头文件是一种重要的C++编程工具,可帮助程序员在不同的文件中共享代码。头文件中通常包含函数或类的声明、结构体的定义和宏定义。
4)若main,f1,g1,g2函数中都用到常量YEARDAYS(365),和WON(1),TUE(2),WED(3),THU(4),FRI(5),STA(6),SUN(7)
如何写头文件?
可以将常量定义放在单独的头文件中,并在需要使用这些常量的文件中包含该头文件。这将确保在整个程序中都可以使用这些常量,同时也更容易进行修改和维护。因此,以下是如何编写包含常量的头文件:
// constants.h
#ifndef CONSTANTS_H
#define CONSTANTS_Hconst int YEARDAYS = 365;
const int WON = 1;
const int TUE = 2;
const int WED = 3;
const int THU = 4;
const int FRI = 5;
const int SAT = 6;
const int SUN = 7;#endif
2.以max函数为例,实现不同参数传递方式(传值/传引用),不同参数常量性,
以及不同的返回值类型(值返回,引用返回,常量引用返回)等情况下,max函数的
参数虚实结合和max的各种使用和它们间的异同。注意参数不同形式时,哪些形式的调用是可以的?哪些算重载函数?哪些是完全等价的?
int max(int,int);
int max(const int, const int);
const int max(int,int);
int max(int&,int&);
int& max(int&,int&);
int& max(const int&,const int&);
const int& max(int&,int&);
const int& max(const int&,const int&);
…
Main函数中,可能有如下的调用:
int retValue01 = max(1,2);
int retValue02 = max(a,b);
max(a,3) = 5;
max(a,b)=max(c,d );
等形式。
max函数的参数虚实结合和使用方式可以有多种,包括传值、传引用、常量参数、返回值类型等。以下是各种情况下max函数的声明和定义:
以下是各种情况下max函数的声明和定义,以及可能的调用方式和异同点的总结:
- 传值和常量参数
int max(int a, int b); // 值返回
int max(const int a, const int b); // 常量值返回
const int max(int a, int b); // 常量值返回
这些函数接受两个int型参数,并返回较大的值。它们是根据传递的参数类型和返回类型的不同而进行重载的。
对于这些函数,可以用常量或变量来调用它们。对于常量值返回类型的函数,不能用左值调用函数。
- 传引用和常量引用参数
int max(int& a, int& b); // 引用返回
int& max(int& a, int& b); // 引用返回
int& max(const int& a, const int& b); // 常量引用返回
const int& max(int& a, int& b); // 常量引用返回
这些函数接受两个int型引用或常量引用参数,并返回较大的值。它们是根据传递的参数类型和返回类型的不同而进行重载的。
对于引用返回类型的函数,可以用左值调用函数。对于常量引用返回类型的函数,可以用常量或变量来调用它们。
有些函数可能是重载函数,有些函数可能是完全等价的。例如,传递int和const int参数的max函数是重载函数,而传递int和const int&参数的max函数是完全等价的。
3.练习类的定义与多文件实现
类A的定义在头文件a.h中,
class A {
public:
void Display() const {
cout<<“The argment is NULL”<<endl;
}
void Display(const char * str) const {cout<<"The argment is "<<str<<endl;
}
void OtherFunc() {
}
};
main函数写在mainApp.cpp文件中,
int main(int argc,char * argv[])
{
A aA;
if (argc>1) {aA.Display(argv[1]);
} else {aA.Display();
}cout<<sizeof(A)<<endl;return 0;
}
a) 查看上述程序的执行结果。理解命令行参数、对象的大小、函数重载。
程序的执行结果取决于命令行参数的数量。如果argc大于1,则将argv[1]传递给A的Display函数,否则将调用Display函数的无参版本。
在最后,程序会打印出A对象的大小(以字节为单位)。函数重载是在同一作用域内定义多个具有相同名称但参数列表不同的函数。
b)现将Display函数分别改成以inline形式和纯外联实现,试一试。理解内联/外联实现在编程中的注意事项。
将Display函数实现为内联函数的方式是在函数定义之前添加关键字inline。
c) 试一试在a.h中,写或不写包含警戒,程序是否正确执行。
在a.h文件中应该写包含警戒,以确保头文件只被编译一次。如果没有包含警戒,可能会导致重复定义的错误。
d)给类A增加一个整型的类变量aStaticInt和一个类方法,在main函数中调用该方法。
掌握类变量的声明和定义。进一步,试一试,类变量是一个数组呢?
在类A中添加一个静态成员变量aStaticInt和一个静态成员函数,可以在类定义中声明该变量和函数,但需要在实现文件中定义它们。在main函数中,可以使用作用域解析运算符(::)访问静态成员变量和函数。
例如:
// a.h
class A {
public:static int aStaticInt;static void StaticFunc();// 其他成员函数
};// a.cpp
#include "a.h"
int A::aStaticInt = 0;
void A::StaticFunc() {// 实现
}// mainApp.cpp
#include "a.h"
int main(int argc,char * argv[])
{A::aStaticInt = 10;A::StaticFunc();// 其他代码return 0;
}可以将aStaticInt定义为数组,例如:
static int aStaticInt[10];
e)现再增加一个类B,并放入b.h中
class B {
public:void Func() { cout<<"This is member function Func()"<<endl;}
private:A aA;
};并在主函数中调用B中的成员函数Func.
在b.h中添加B类的定义,并在main函数中创建B对象并调用其成员函数:
// b.h
#include "a.h"
class B {
public:void Func();
private:A aA;
};// mainApp.cpp
#include "b.h"
int main(int argc,char * argv[])
{B b;b.Func();// 其他代码return 0;
}
f) 针对e),重新按c)中的要求试一试。若将Func的实现改成外联实现,按c)中的要求,再试一试。
准确理解包含警戒的作用,以及各cpp文件独立编译的含义。
如果将Func函数的实现定义为外联函数,则需要将函数声明添加到b.h文件中,并在另一个文件中实现函数。由于Func函数中包含对A类的引用,因此需要包含a.h文件。此外,需要确保各个cpp文件都被独立编译,并在链接时进行链接。以下是相关代码示例:
// b.h
#ifndef B_H
#define B_H
#include "a.h"
class B {
public:void Func();
private:A aA;
};
#endif // B_H// b.cpp
#include "b.h"
void B::Func() {// 实现
}// mainApp.cpp
#include "b.h"
int main(int argc,char * argv[])
{B b;b.Func();// 其他代码return 0;
}
g)将e)中的B改成:
class B {
public:
B(A& aA) { pA = &aA; }
void Func() {
cout<<“This is member function Func()”<<endl;
}
void NewFunc()
{
pA->OtherFunc();
}
private:
A * pA;
};
试一试,让程序编译通过并执行。
将B类的构造函数中的参数类型更改为指向A对象的指针,并在NewFunc函数中使用指针操作符(->)调用OtherFunc函数。
// b.h
#include "a.h"
class B {
public:B(A* pa) : pA(pa) {}void Func();void NewFunc();
private:A* pA;
};// b.cpp
#include "b.h"
void B::Func() {// 实现
}
void B::NewFunc() {pA->OtherFunc();
}// mainApp.cpp
#include "a.h"
#include "b.h"
int main(int argc,char * argv[])
{A a;B b(&a);b.Func();b.NewFunc();// 其他代码return 0;
}
h)将B中的NewFunc函数以外联的形式实现,b.h可以怎么写?
理解class A;与#include "a.h"的含义差别,理解外联实现的好处。
在b.h文件中添加对A类的前向声明(class A;),然后在b.cpp文件中包含a.h文件
class A;是A类的前向声明,用于告知编译器A类的存在,但不包含A类的定义。
这可以减少头文件的依赖性,提高编译效率。但是,前向声明只能用于声明指向A类对象的指针或引用,并不能使用A类的成员函数和数据成员。
#include "a.h"是包含A类的完整定义,可以在当前文件中使用A类的所有成员函数和数据成员。
外联实现的好处在于,可以将函数定义放在单独的cpp文件中,使得程序模块化和可维护性更好。外联函数的声明在头文件中,这样其他文件可以访问该函数,但是定义在单独的cpp文件中,可以避免重复定义错误。此外,外联函数的实现可以放在库文件中,可以在多个程序中共享使用,提高代码的复用性。
4.练习将实际生活中的事物,抽象成类,并给出类的设计
(找出数据成员和成员函数并用C++的类表示出来即可)
1)笔、钢笔
2)文件、目录
3)打印机、显示器
4)太阳、月亮
1)笔、钢笔类名:Pen数据成员:
- inkColor (string):笔的墨水颜色
成员函数:
- refill(int inkAmount):加墨水2)文件、目录类名:File数据成员:
- fileName (string):文件名
- fileSize (int):文件大小
- fileExtension (string):文件扩展名
- filePath (string):文件路径
- createdDate (string):文件创建日期成员函数:
- open():打开文件
- close():关闭文件
- rename(string newName):重命名文件
-delet(): 删除文件类名:Directory数据成员:
- dirName (string):目录名
- dirPath (string):目录路径
- subDirectories (vector<Directory>):子目录列表
- files (vector<File>):文件列表成员函数:
- addSubDirectory(Directory subDir):添加子目录
- addFile(File file):添加文件
- removeSubDirectory(Directory subDir):移除子目录
- removeFile(File file):移除文件3)打印机、显示器类名:Printer数据成员:
- isConnected (bool):打印机是否已连接
- inkLevel (int):墨水量
- paperLevel (int):纸张量成员函数:
- print(string text):打印文本
- checkInkLevel():检查墨水量
- checkPaperLevel():检查纸张量类名:Monitor数据成员:
- resolution (string):分辨率
- isConnected (bool):显示器是否已连接
- brightness (int):亮度
- contrast (int):对比度成员函数:
- displayImage(Image image):显示图像
- adjustBrightness(int value):调节亮度
- adjustContrast(int value):调节对比度4)太阳、月亮类名:Sun数据成员:
- diameter (double):太阳直径
- temperature (int):太阳表面温度
- mass (double):太阳质量成员函数:
- emitEnergy():辐射能量
- rotate():自转类名:Moon数据成员:
- diameter (double):月球直径
- distanceFromEarth (double):距离地球的距离
- mass (double):月球质量成员函数:
- orbit():绕地球轨道运动
- reflectSunlight():反射阳光
- string getName(); // 获取名称
- float getRadius(); // 获取半径
- float getDistanceToEarth(); // 获取距离地球的距离
- bool isSun(); // 判断是否为太阳
5.练习读懂类的代码,练习使用已有的类。
下面的TRandom类是用线性调和算法,实现的一个伪随机数发生器,仔细阅读代码,理解其含义。
线性调和算法的基本原理是:对于给定的N、M和K,任给一个X,
不断用X=((N*X+M) mod K )进行迭代计算,那么得到的无穷多个x值,
近似于在(0,K)上的均匀分布.其中N,M,K为较大的数(N最好是素数).
#include <limits.h> //声明INT_MAX和ULONG_MAX常量
#include <windows.h> //声明GetTickCount()函数,其返回从开机到现在经过的毫秒数
//#include <stdlib.h> //声明rand和srand函数
//#include <time.h> //声明time函数
class TRandom
{
public:
//缺省使用系统时间(开机后经过的毫秒数)为种子
TRandom (long seed=0) { mSeed=(seed?seed: GetTickCount()); }
//也可以定义自己的种子
void Seed(long seed=0) { mSeed=(seed?seed: GetTickCount( )); } //取得一个随机的整数
int Integer() { return Next();} //取得一个在指定范围内的随机整数
int Integer(int min,int max) { return min+Next()%(max-min+1);} //取得一个随机的(0到1之间的)小数
double Real() {return double(Next())/double(INT_MAX);}
private:
//使用调和算法
void Change() {mSeed=(314159265*mSeed+13579)%ULONG_MAX;}
//取得伪随机数发生器的随机数序列中的下一个随机整数
int Next() { int loops=mSeed%3; for (int i=0;i<=loops;i++) Change ();return int(mSeed/2); }
unsigned long mSeed; //随机数发生器的种子
};
现有一个大小为54的整型数组,其元素分别为0,1,2,…,53.
1) 注意类中的public和private, 理解访问控制的作用.
public和private是C++中的访问控制关键字,用于限制类的成员的访问权限。
public成员可以被类外的代码访问和调用,而private成员只能被类内的成员函数访问和调用。在类的设计中,将数据成员设为private可以保证其不被直接访问和修改,而必须通过类的公有成员函数来完成相关的操作,增强了程序的安全性和可维护性。
2)请利用给出的TRandom类,完成此数组的”洗牌”过程,并输出洗牌后的顺序。写出相应的完整C++程序。
思考:用TRandom类,洗牌后,54张牌的排列大约多少种可能?现实中54张可有多少种排列方法?
#include <iostream>
#include "TRandom.h"int main() {int a[54];for (int i = 0; i < 54; i++) {a[i] = i;}TRandom r;for (int i = 0; i < 54; i++) {int j = r.Integer(i, 53); // 生成i到53之间的随机整数int temp = a[i];a[i] = a[j];a[j] = temp;}for (int i = 0; i < 54; i++) {std::cout << a[i] << " ";}std::cout << std::endl;return 0;
}
3)利用给出的TRandom,使用投针法,估算PI值。
投针法:在半径为1的1/4圆内,随机投针,若落在圆内,则圆内计数加1;
这样,若总投掷数为N次,落在园内M次,随着N的增大,
M/N约等于PI/4,即PI约等于4*M/N.
#include <iostream>
#include <cmath>
#include "TRandom.h"int main() {TRandom r;int total = 1000000; // 投针总次数int inside = 0; // 落在圆内的次数for (int i = 0; i < total; i++) {double x = r.Real();double y = r.Real();if (x*x + y*y <= 1) {inside++;}}double pi = 4.0 * inside / total;std::cout << "Estimated pi value: " << pi << std::endl;std::cout << "Error: " << std::abs(pi - 3.141592653589793) << std::endl;return 0;
}>>通过投掷1000000次针,估算得到的π值约为3.141748,误差为0.000156。由于投针法的随机性,每次运行结果可能不同,但随着投掷次数的增加,估算结果逐渐趋近于π的真实值。
6.一个骰子(dice)有6个面,各面的点数分别为1,2,3,4,5,6,但各面之间的相对位置是固定的。
请实现Dice类,其主要完成
(1) 模拟掷骰子过程(Cast),并返回掷得的点数;
(2)报告当前各面的点数。
(3) 模拟一次掷两个或多个骰子,并返回得到的总点数。
实现该类时,取得随机数可使用系统函数srand和rand,也可使用上例中的TRandom类。
注:本题算法不是很好,采用了6个if条件判断,原因是抛掷一次骰子所得到的点数所在面与观察者所面向的面的相对位置关系并不确定。也可以采用随机化三次,分别表示骰子在空中旋转时沿x,y,z轴方向旋转的次数的方法来解决。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;class Dice {
public:Dice() {srand(time(NULL));up = 1;down = 6;left = 2;right = 5;front = 3; back = 4;}// 掷一次骰子(默认向上的点数为结果) int cast() {int idx = rand() % 6 + 1; // 生成1~6的随机数up = idx;down = 7 - up;if (up == 3) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 6) {left = 2;right = 5;}if (front == 1) {left = 5;right = 2;}if (front == 2) {left = 1;right = 6;}if (front == 5) {left = 6;right = 1;}}if (up == 4) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 1) {left = 2;right = 5;}if (front == 6) {left = 5;right = 2;}if (front == 2) {left = 6;right = 1;}if (front == 5) {left = 1;right = 6;}}if (up == 1) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 3) {left = 2;right = 5;}if (front == 4) {left = 5;right = 2;}if (front == 2) {left = 4;right = 3;}if (front == 5) {left = 3;right = 4;}}if (up == 6) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 3) {left = 5;right = 2;}if (front == 4) {left = 2;right = 5;}if (front == 2) {left = 3;right = 4;}if (front == 5) {left = 4;right = 3;}}if (up == 2) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 1) {left = 3;right = 4;}if (front == 6) {left = 4;right = 3;}if (front == 3) {left = 6;right = 1;}if (front == 4) {left = 1;right = 6;}}if (up == 5) {while(1) {temp = rand() % 6 + 1;if (temp != up && temp != down) break;}front = temp;back = 7 - front;if (front == 6) {left = 3;right = 4;}if (front == 1) {left = 4;right = 3;}if (front == 3) {left = 1;right = 6;}if (front == 4) {left = 6;right = 1;}}return up; }// 输出当前各面的点数void report() {cout << "Points: " << endl;cout << "上面的点数为:" << up << endl;cout << "下面的点数为:" << down << endl;cout << "前面的点数为:" << front << endl;cout << "后面的点数为:" << back << endl;cout << "左面的点数为:" << left << endl; cout << "右面的点数为:" << right << endl;cout << endl;}// 掷n个骰子,返回总点数int castMulti(int n) {int totalPoints = 0;for (int i = 0; i < n; i++) {totalPoints += cast();}return totalPoints;}private:
// int m_points[6]; // 存储各面的点数int up;int down;int front;int back;int left;int right; int temp;
};// 测试代码
int main() {Dice d;d.report(); // 输出初始点数int point = d.cast();cout << "Cast: " << point << endl;int totalPoints = d.castMulti(3);cout << "Total points: " << totalPoints << endl;return 0;
}
相关文章:
2022级吉林大学面向对象第一次上机测试
【注:解答全部为本人所写,仅供同学们学习时参考使用,请勿照搬抄袭!】 1、 1)略 2)如果main,f1,g1,g2或更多的函数之间有更为复杂的调用关系,头文件一般按怎样的规律写呢? 一般情况下…...
计算机体系结构总结:内存一致性模型 Memory consistency Model
存储一致性是为了保证多线程背景下的访存顺序,多线程的语句是可以交错执行,使得顺序不同产生不同的执行结果。 下面P2的输出结果可能是什么? P1, P2两个线程的语句是可以交叉执行的,比如1a, 2a, 2b, 1b;一个线程内的语…...
高速列车运行控制系统(CTCS)介绍
1、CTCS功能 安全防护 在任何情况下防止列车无行车许可运行防止列车超速运行防止列车超过进路允许速度防止列车超过线路结构规定的速度防止列车超过机车车辆构造速度防止列车超过临时限速及紧急限速防止列车超过铁路有关运行设备的限速防止列车溜逸 人机界面 以字符、数字及…...
C#“System.Threading.ThreadStateException”类型的未经处理的异常
备忘 最近做一个功能,从主界面进入另一个界面时,数据量较大,处理信息较多,程序宕机。而且点击程序还会提示程序无响应。不得已用另一个线程显示界面。但在界面中使用控件时,报错:“System.Threading.Thread…...
为什么要交叉编译?
一、什么是交叉编译、为什么要交叉编译 1、什么是交叉编译? 交叉编译:是在一个平台上生成另一个平台上的可执行代码。比如我们在 x86 平台上,编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的…...
java版本电子招标采购系统源码—企业战略布局下的采购
智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明࿰…...
【MATLAB数据处理实用案例详解(17)】——利用概念神经网络实现柴油机故障诊断
目录 一、问题描述二、利用概念神经网络实现柴油机故障诊断原理三、算法步骤3.1 定义样本3.2 样本归一化3.3 创建网络模型3.4 测试3.5 显示结果 四、运行结果五、完整代码 一、问题描述 柴油机的结构较为复杂,工作状况非常恶劣,因此发生故障的可能性较大…...
神奇字符串、密钥格式化----2023/5/6
神奇字符串----2023/5/6 神奇字符串 s 仅由 ‘1’ 和 ‘2’ 组成,并需要遵守下面的规则: 神奇字符串 s 的神奇之处在于,串联字符串中 ‘1’ 和 ‘2’ 的连续出现次数可以生成该字符串。 s 的前几个元素是 s “1221121221221121122……” 。…...
STM32F4_十进制和BCD码的转换
目录 前言 1. BCD码 2. BCD码和十进制转换的算法 前言 最近在学习STM32单片机(不仅仅是32)的RTC实时时钟系统的过程中,需要配置时钟的时间、日期;这些都需要实现BCD码和十进制之间进行转换。这里和大家一起学习BCD码和十进制之…...
random — 伪随机数生成器(史上总结最全)
目的:实现几种类型的伪随机数生成器。 random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器。Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输入,可生成具有分布均匀,大周期的数字,使其可以广泛用于各种…...
基于VBA实现成绩排序的最佳方法-解放老师的双手
作为一名老师,每到期末就要面对一件让人头疼的事情——成绩表统计。 首先,要收集每个学生的考试成绩。这需要花费大量的时间和精力,因为每个学生都有多门科目的成绩需要统计。 其次,要将每个学生的成绩录入到电子表格中。这看起来…...
OCAF如何实现引用关系和拓扑关系
在 OpenCASCADE 中,TDF_Label 是用来保存对象及其属性的基本单元。TDF_Label 可以通过添加不同类型的属性来保存不同的数据类型。属性是继承自 TDF_Attribute 类的对象,每个属性都有一个唯一的标识符(GUID)来识别其类型。TDF_Label是OpenCASCADE中用来管理数据的标签类,它…...
自动创建设备节点
在成功加载驱动模块之后,还需要使用 mknod命令创建设备节点,才能在/dev目录下创建对应的设备文件。自动创建设备节点的功能需要依赖 mdev 设备管理机制,在使用 buildroot 构建 rootfs 的时候,会默认构建 mdev 的功能,m…...
JavaWeb ( 六 ) JSP
2.4.JSP JSP (Java Server Pages) : 一种在服务器端生成动态页面的技术,本质上就是Servlet。将HTML代码嵌入到Java代码中, 通过Java逻辑控制HTML代码的结构从而生成页面。在MVC中通常担任视图层(view),负责信息的展示与收集。 2…...
2023世界超高清视频产业发展大会博冠8K明星展品介绍
2023世界超高清视频产业发展大会博冠8K明星展品介绍: 一、博冠8K全画幅摄像机B1 这是一款面向广电应用的机型,可适配外场ENG制作轻量化需求,应用于8K单边机位、新闻、专题的拍摄工作,也可应用于体育转播、文艺节目等特殊机位及各…...
Map接口以及Collections工具类
文章目录 1.Map接口概述1.1 Map的实现类的结构1.2 Map中存储的key-value结构的理解1.3 HashMap的底层实现原理(以JDK7为例)1.4 Map接口的常用方法1.5 TreeMap1.6 Map实现类之五: Properties 1.Collections工具类1.1方法1.1.1 排序操作(均为static方法)1.1.2 查找、替换 1.Map接…...
SOA协议DDS和Some/IP对比
SOME/IP 和 DDS 均已被纳入AUTOSAR AP的平台标准中。 SOME/IP 和 DDS是在不同的应用场景和不同的需求下诞生的技术,所以它们之间注定有很大的区别。 SOME/IP SOME/IP的全称为:Scalable service-Oriented MiddlewarE over IP,是一种面向服务…...
Sass使用
前言: 这份记录,主要是记录学习sass的学习记录,用于记录一些本人认为可能以后会用到的比较常用的一些知识点,更详细的请看sass官网 功能1-嵌套规则 Sass 允许将一套 CSS 样式嵌套进另一套样式中,内层的样式将它外层的…...
超大excel文件读,避免内存溢出
excel40M,但是用传统的读取excel方法,会报内存溢出的错误。 所以采用了下面的方式,能解决此问题: maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><ve…...
第0章 学习之前的准备
突然想写点关于linux的东西,一是将自己几十年来零碎的知识作以串联,二是能为正在学习路上的新手作些指引。而恰好作者的孩子是一位初一的学生,我写的这些东西也正是我手把手教授他的,现在分享出来并且命名为《linux中学教程》&…...
数组排序sort()方法
sort() 方法对数组的项目进行排序。 排序顺序可以是按字母或数字,也可以是升序(向上)或降序(向下)。 默认情况下,sort() 方法将按字母和升序将值作为字符串进行排序。 一、语法 array.sort(compareFunct…...
【.NET AI Books 前言】Azure OpenAI Service 入门
本书是为 .NET 开发者而写的,让 .NET 开发者能快速掌握 Azure OpenAI Service 的使用技巧。 ChatGPT 的到来意味着我们已经置身于 AI 引起的全新变革中,作为开发者你可能将面临几种改变: GPT 模型到来后,如何去架构好企业解决方案…...
散列查找实验(开散列) 题目编号:583
题目描述 请设计一个整型开散列表,散列函数为除留余数法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,输出查找结果采用头插法。 输入描…...
Java版spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)
工程项目管理软件(工程项目管理系统)对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营,全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…...
Go type关键字定义新类型和类型别名的区别
type关键字再定义类型和类型别名有很大的区别,前者是新定义一个数据类型,后者是对类型的重命名。 type NewString stringtype OldString stringtype NewString string声明了一个NewString类型,和string具有完全一致的数据结构,确…...
Neural Network学习笔记2
torch.nn: Containers: 神经网络骨架 Convolution Layers 卷积层 Pooling Layers 池化层 Normalization Layers 正则化层 Non-linear Activations (weighted sum, nonlinearity) 非线性激活 Convolution Layers Conv2d torch.nn.Conv2d(in_channels, out_channels, ke…...
用@Value注解为bean的属性赋值
1.Value注解 Value注解的源码,如下所示 Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface Value {String value(); }从Value注解的源码中…...
拨云见日:深入理解 HTML 解析器与有限状态机
文章目录 参考描述状态机状态机有限状态机与无限状态机有限状态机与自动售货机无限状态机与计算器 HTML 解析器HTML 解析器HTML 与有限状态机 HTML 解析器的常见状态初始状态DOCTYPE 状态注释状态标签状态开始标签状态属性状态属性名状态属性值状态 结束标签状态自闭和标签状态…...
Java线程池及其实现原理
线程池概述 线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机…...
进程替换函数组介绍exec*
目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义: l (list):表示参数采用列表。 v(vector):参数同数组表示。 p(path):自…...
网站支付页面怎么做的/做网络推广要学些什么
武汉大学计算机学院 2014 年优秀大学生暑期夏令营通知类别:教务 发布人:admin 浏览次数:1717 次 发布时间:2014-06-11 08:08:36一、 夏令营时间、地点及内容安排 时间:7 月 9、10、11 三天 地点:武汉大学计算机学院 内容安排: 第一天上午 营员…...
公司网站代码模板下载/重庆seo排名优化费用
爬取多个网页 讲师的博客:https://www.cnblogs.com/wupeiqi/p/6229292.html在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢。比如找10个国外的资源爬取,慢…...
公务员 做网站 违法/关键词优化上海
转载...在使用VS2005和SQL Server 2005,将原来在VS03下的工程和SQL Server 2000 的数据库,出现以下错误:错误 1 EXTERNAL 附近有语法错误。您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助…...
wordpress导出文章word/网上店铺的推广方法有哪些
我在亚洲新加坡地区的亚马逊地区创建了一个中等实例.我用主密码创建了我的主用户.它与我本地PC上安装的工作台正常工作/连接.什么时候,我要在该实例上创建函数,它会向我显示以下错误ERROR 1418: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de…...
做电脑网站步骤/国内seo公司
window属性:devicePixelRatio 设备像素比 https://www.w3cschool.cn/fetch_api/fetch_api-atvq2nma.html devicePixelRatio属性示例 一个 canvas 在视网膜屏幕上可能显得太模糊。使用 window.devicePixelRatio 以确定应该添加多少额外的像素密度以允许更清晰的图像…...
韩国大型门户网站/百度一下百度搜索官网
在读这篇文章之前,请确定你已经了解MIP定义及加速原理。如果不确定的话,可以到MIP官网了解。 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成MIP站,也可以单独再做一套MIP站点与移动站并存。 复杂的页面暂不建议MIP改造&am…...