当前位置: 首页 > news >正文

C++期末整理

课堂笔记

构造与析构

#include <iosteam>
#include <cstring>
using namespace std;struct Date
{int y, m, d;void setDate(int, int, int);Date(int yy, int mm, int dd) {y = yy, m = mm, d = dd;}
};class Student
{
private:char* name;Date birthday;
public:// 如果没写不带参数的构造函数,系统会提供一个不带参数的构造函数,称为缺省构造函数,或者是拷贝构造函数Student(const Student&); // 拷贝构造函数,当有new和delete的时候要写Student():birthday(2000, 3, 4) {} // 不带参数的构造函数Student(char*, int, int, int);~Student() {delete []name;} // 与构造函数成对出现
};Student::Student & operator = (const Student &s1) // 运算符重载函数
{name = new char[strlen(s1.name) + 1];strnpy(name, s1.name, strlen(s1.name));birthday = s1.birthday;return *this;
}Student::Student(const Student &s1) // 拷贝构造函数:birthday(s1.birthday) // 初始化
{// name = s1.name; // 错误 name = new char[strlen(s1.name) + 1];// name = s1.name; 错误,没用到新开辟的空间strncpy(name, s1.name, strlen(s1.name));
}Student:: Student(char* p, int y, int m, int d): birthday(y, m, d) // 初始化
{// name = p; 不好,指针会改变// name = new char[sizeof(p)]; // 指针的大小,一般为8个字节,但不是字符串的长度name = new char[strlen(p) + 1]; // 多一个位置存放'\0'strncpy(name, p, strlen(p));
};void print(Student s)
{cout << s,name << endl; // error,私有的,不能访问
}int main()
{const char *p = "zhangsan";Student s1((char*)p, 2000, 3, 4); // 强制类型转换// Student *s;// s = new Student[10000]; // 调用不带参数的构造函数10000次Student s2(s1); // 调用拷贝构造函数// print(s1); // 也会调用拷贝构造函数Student s3;s3 = s1; // 运算符重载return 0;
}

静态与友元

#include <iostream>
using namespace std;class Student;
class Date
{string printDate(Student*);
};int studentCount()
{static int count = 0; // 静态变量,一直存在,可以理解成全局变量,生命周期和全局变量一样,但只能在函数中使用count++;return count;
}class Student
{
private:string name; // 比字符串好操作int num;int age;static int count; // 全班的同学数目static int totalage;
public:Student(string, int, int);void total(); // 成员函数,有一个隐藏的参数,this指针static float averageAge(); // 静态函数,无this指针// friend是单向的friend void print(Student *); // 友元函数,无this指针,一般的,友元函数里面一般有一个参数,指针或者引用friend string Date::printDate(Student*);friend Date; // Date里边所有的函数都是我的朋友,一般不建议
};Student::Student(string name1, int num1, int age1):name(name1), num(num1);
{age = age1; // 和上面的初始化方法的结果及作用相同
}void Student::total()
{totalage += age;count++;
}float Student::averageAge() // 静态函数
{// cout << age; // error,静态函数不能访问类里边的age变量,因为没有this指针return totalage / count;
}int Student::count = 0; // 静态变量的初始化
int Student::totalage = 0;void print(Student *s) // 全局函数,参数*s也可以写成&s,下面的"->"改成"."
{s.name = string("class") + s.name; // 可以修改类里面的私有变量的值cout << s -> name<< s -> num<< s -> age;
}int main()
{Student s[3] = {Student("zhang", 202301, 18),Student("li", 202302, 19),Student("wang", 202303, 18)};for (int i = 0; i < 3; i++){s[i].total();}Student st0(s[0]);Student st1("liu", 202304, 17);st1 = st0;cout << "average age = " << Student::averageAge(); // 调用静态函数的标准写法cout << "average age = " << s[0].averageAge(); // 也是正确的,但是不建议用,具有误导性return 0;
}

string

#include <iosteam>
using namespace std;int main()
{string s1;string s2("hello world\n");cout << s2[4]; // 打印s2里边的第四个字符,也是一个函数,运算符函数s1 = s1 + s2;cout << s1;
}

继承

#include <iostream>
using namespace std;class Student
{
private:
protected: // 继承者可以访问string name; // 比字符串好操作int num;int age;
public:// 当父类的构造函数被调用时,它的子类构造函数会被自动调用,跟析构函数的调用相反Student(string, int, int);void print1() {cout << name << num << age;}~Student() {cout << "Destruct Student\n";}
};Student::Student(string name1, int num1, int age1):name(name1), num(num1);
{age = age1; // 和上面的初始化方法的结果及作用相同cout << "Construct Student\n";
}class IOTStudent : public Student // 常用public表示继承,如果不写public,则默认为private,但是也没有意义
{
private:int cpp;
public:IOTStudent(string, int, int, int, int);void print() {cout << name << num << age << cpp;} // 可以访问父类的变量,如果是private则不可以访问// 所有的子类被调用析构函数时,他的父类析构函数也会被自动调用~IOTStudent() {cout << "Destruct IOTStudent\n";}
};// 子类必须为父类提供参数
IOTStudent::IOTStudent(string name1, int num1, int age1, int cpp): Student(name1, num1, age1) // 调用Student的有参构造函数
{cpp = cpp1;cout << "Construct IOTStudent\n";
}void f(Student *p) // 根据p的数据类型来判断调用什么输出函数
{p->print();
}int main()
{// 指针不会产生构造函数// 父类的指针比较好用Student s1("zhang", 20230001, 19), *p1; // p1不会调用构造和析构函数IOTStudent s2("li", 20230002, 19, 86), *p2; // s2先调用一个父类的构造函数,再构造子类的构造函数// 先调用s2的子类的析构函数,再调用s2的父类的析构函数,最后调用s1的父类的析构函数f(&s1); // 打印父类的打印函数f(&s2); // 打印父类的打印函数,因为静态联编p1 = &s1;p1->print(); // 打印出父类的打印函数p1 = &s2;/* 还是打印父类的打印函数,因为p1是Student类型的指针变量,静态编译,此时编译器不知道p1指向的是哪一个地方,编译器只能通过p1的数据类型来判断指向哪一片区域*/p1->print();IOTStudent *p2;p2 = &s2; // 不能指向s1p2->print(); // 想要调用子类的打印函数只能通过定义一个子类的数据类型的变量s1 = s2; // right,但是没有实用价值p1 = &s1; // 取s1的地址p2 = &s2;p1 = &s2; // rightp2 = &s1; // error,子类的指针指向父类的地址是错误的,cpp会变成随机数p1 = p2; // rightp2->print(); s2 = s1; // error,最后一个cpp的空间为随机数cout << "size of Student is:" << sizeof(Student) << endl;cout << "size of IOTStudent is:" << sizeof(IOTStudent) << endl;cout << s2.name; // errors2.print(); // 打印IOTStudent里的打印函数(就近原则)s2.print1(); // 打印Student里的打印函数,可以调用父类的函数,可以通过改函数名来区分s2.Student::print(); // 指定调用STudent父类里边的打印函数,"::"表示预操作符return 0;
}

动态联编

#include <iostream>
using namespace std;class Student
{
private:
protected: // 继承者可以访问string name; // 比字符串好操作int num;int age;
public:// 当父类的构造函数被调用时,它的子类构造函数会被自动调用,跟析构函数的调用相反Student(string, int, int);// 动态联编,或者是多态// 需要父类和子类的函数头,参数完全相同virtual void print() {cout << name << num << age;} // 虚函数,父类的函数是虚函数,子类的相同的函数也是虚函数~Student() {cout << "Destruct Student\n";}
};Student::Student(string name1, int num1, int age1):name(name1), num(num1);
{age = age1; // 和上面的初始化方法的结果及作用相同cout << "Construct Student\n";
}class IOTStudent : public Student // 常用public表示继承,如果不写public,则默认为private,但是也没有意义
{
private:int cpp;
public:IOTStudent(string, int, int, int, int);virtual void print() {cout << name << num << age << cpp;} // 可以访问父类的变量,如果是private则不可以访问// 所有的子类被调用析构函数时,他的父类析构函数也会被自动调用~IOTStudent() {cout << "Destruct IOTStudent\n";}
};// 子类必须为父类提供参数
IOTStudent::IOTStudent(string name1, int num1, int age1, int cpp): Student(name1, num1, age1) // 调用Student的有参构造函数
{cpp = cpp1;cout << "Construct IOTStudent\n";
}void f(Student *p) // 根据p的数据类型来判断调用什么输出函数
{p->print();
}int main()
{// 指针不会产生构造函数// 父类的指针比较好用Student s1("zhang", 20230001, 19), *p1; // p1不会调用构造和析构函数IOTStudent s2("li", 20230002, 19, 86), *p2; // s2先调用一个父类的构造函数,再构造子类的构造函数// 先调用s2的子类的析构函数,再调用s2的父类的析构函数,最后调用s1的父类的析构函数Student *p1;p1 = &s2;f(p1); // 调用父类的函数输出IOTStudent *p2;p2 = &s2;f(p2); // 调用父类的函数输出,因为输出什么类型唯一的判断标准是f函数的参数类型// 希望这个指针所指向的对象是什么类型的,就调用什么类型的输出函数,就需要使用动态联编,virtualStudent *p;p = &s1;p -> print();p = &s2;p -> print();return 0;
}

动态联编的例子

#include <iostream>
using namespace std;class Shape
{
protected:double L, H;
public:void init() {cout << "input L=";cin >> L;cout << "input H=";cin >> H;}/*如果在基类里面有纯虚函数,则他的派生类必须实现这个函数,如果不实现,则编译会报错且基类不能有实例e.g. Shape s; // errors.area(); // error*/virtual double area() = 0; // 不是返回0的意思,意思是不写这个函数,也叫纯虚函数
};class Tr : public Shape // 三角形
{
public:virtual double area() {return L * H / 2;}
};class Re : public Shape // 矩形
{
public:virtual double area() {return L * H;}
};class Ci : public Shape // 圆
{
public:virtual double area() {return 3.14 * 3.14 * L;}
};int main()
{Shape *p; // 父类指针好用for (int i = 0; i < 5; i++){char c;cout << "\ninput shape type";cin >> c;if (c == 'T'){p = new Tr;}else if (c == 'R'){p = new Re;}else if (c == 'C'){p = new Ci;}else{break;}p->init(); // 初始化,在函数中输入长度和宽度cout << "\narea of p is:" << p->area();}delete p;return 0;
}

+±-重载

#include <iostream>
using namespace std;class Complex
{
private:double x, y;
public:Complex(double xx = 0, double yy = 0); // 如果不写参数,则默认他的xx和yy都默认为0,默认调用缺省构造函数void print();Complex& operator++();Complex operator++(int);friend Complex& operator--(Complex& c);
};Complex::Complex(double xx = 0, double yy = 0) // 如果不写参数,则默认他的xx和yy都默认为0
{x = xx;y = y;
}void Complex::print()
{cout << x;if (y > 0){cout << "+" << y << 'i';}else if (y < 0){cout << y << 'i';}
}Complex& operator++()
{x++;return *this;
}Complex Complex::operator++(int) // 不能返回引用,因为生存周期问题,函数结束后,指针消失,所以不能返回一个指针
{Complex temp(*this); // 把自己拷贝x++;return temp;
}Complex& operator--(Complex& c)
{c.x -= 1;return c;
}int main()
{Complex c2(1.1, -2.2);++c2; // 调用函数Complex& operator++();cout << c2 << endl;c2++; // 调用函数Complex operator++(int)cout << c2;--c2;cout << c2;return 0;
}

函数模板

// 函数的模板放在.h文件里面
#include <iostream>
using namespace std;class Complex
{
private:double x, y;
public:Complex(double xx = 0, double yy = 0); // 如果不写参数,则默认他的xx和yy都默认为0,默认调用缺省构造函数bool operator> (Complex& c);friend ostream& operator<< (ostream&, const Complex&);
};Complex::Complex(double xx = 0, double yy = 0) // 如果不写参数,则默认他的xx和yy都默认为0
{x = xx;y = y;
}Complex operator>(bool& c) 
{return (x * x + y * y > c.x * c.x + c.y * c.y) ? this : c;
}ostream& operator<< (ostream& o, const Complex& c)
{o << c.x;if (c.y > 0){o << '+' << c.y << 'i';}else if (c.y < 0){o << c.y << 'i';}return o;
}/*
int Max(int x, int y);
float Max(float x, float y);
char Max(char x, char y);
Complex Max(Complex x, Complex y);int Max(int x, int y)
{return (x > y) ? x : y;
}float Max(float x, float y)
{return (x > y) ? x : y;
}char Max(char x, char y)
{return (x > y) ? x : y;
}
*/template <typename T1> // 放在头文件里面
T1 Max (T1 x, T1 y)
{return (x > y) ? x : y;
}int Max(int x, int y)
{return (x > y) ? x : y;
}int main()
{int i1 = 4, i2 = 6;cout << Max(i1, i2) << endl;float f1 = 1.2, f2 = 2.3;cout << Max(f1, f2) << endl;char c1 = 'a', c2 = 'x';cout << Max(c1, c2) << endl;// cout << Max(i1, f2) << endl; // 调用int Max(int x, int y)函数,做了一个函数重载Complex com1;// Complex (1);com1 = 1; // x = 1, y = 0,实际上调用构造函数,把1传进去Complex com(1), com(1.1, 1.2);cout << Max(com1, com2) << endl; // <<, >重载return 0;
}

类的模板

// 类的模板放在.h文件里面,模板都放在头文件(.h)里面
#include <iostream>
using namespace std;template <typename T2>
class List
{
private:int n;T2 *v;
public:List(int x);~List();T2& operator [](int x);int search(T2 value);
};template <typename T2>
List<T2>::List(int x)
{n = x;v = new T2[n];
}template <typename T2>
List<T2>::~List()
{delete []v; // 如果不写中括号,申请的内存依旧会被释放,有[],会调用n次析构函数,如果没有,只调用一次
}T2& List<T2>::operator [](int x)
{return v[x];
}template <typename T2>
int List<T2>::search(T2 value)
{for (int i = 0; i < n; i++){if (v[i] == value) // 在Complex中增加"=="运算符重载{return i;}}return -1;
}int main()
{typedef List<int> ilist;ilist il2(57);List<int> il1(57); // 与上式作用相同,同时调用构造函数List<float> fl1(58);fl1[20] = 5.0;List<Complex> c1(59); // 嵌套函数模板return 0;
}//----------------------------------------------分割线---------------------------------------------------------//template <typename T1>
class Mylnt
{
private:T1 t1, t2, t3;
public:Mylnt();Mylnt(T1 t1_value, T1 t2_value, T1 t3_value);T1 getMax();T1 getMin();void sort();void show();
};template <typename T1>
Mylnt<T1>::Mylnt(T1 t1_value, T1 t2_value, T1 t3_value)
{t1 = t1_value;
}template <typename T1>
T1 Mylnt<T1>::getMax()
{T1 max;if (t1 >= t2){if (t1 > t3){max = t1;}else{max = t3;}}else{if (t2 > t3){max = t2;}else{max = t3;}}
}

运算符重载

#include <iostream>
using namespace std;class Complex
{
private:double x, y;
public:Complex(double xx = 0, double yy = 0); // 如果不写参数,则默认他的xx和yy都默认为0,默认调用缺省构造函数void print();// 返回一个引用或者指针的话的话,不能返回一个临时变量,因为指针指向一个临时变量的地址,函数结束后,地址消失,堆栈地址失效Complex& add(const Complex& c2);Complex& operator+=(const Complex& c2); // 运算符重载函数,但是名字固定,功能和上面的函数一样,参数也一样,只是名字不同Complex operator+(const Complex& c2); // 有两个参数,但是有一个是他自己,所以省略,返回不写引用friend Complex operator-(const Complex& c1, const Complex& c2); // 没有this指针,所以要把对象传进去,多一个他自己参数
};Complex::Complex(double xx = 0, double yy = 0) // 如果不写参数,则默认他的xx和yy都默认为0
{x = xx;y = y;
}void Complex::print()
{cout << x;if (y > 0){cout << "+" << y << 'i';}else if (y < 0){cout << y << 'i';}
}Complex& Complex::add(const Complex& c2) // add函数不允许修改c2的内容,返回一个引用
{x += c2.x;y += c2.y;return Complex(x, y); // error,因为这个变量的生命周期结束了return *this; // 把自己传出去
}Complex& Complex::operator+=(const Complex& c2) // 运算符重载函数,但是名字固定,功能和上面的函数一样,参数也一样,只是名字不同
{x += c2.x;y += c2.y;return *this; // 把自己传出去
}Complex Complex::operator+(const Complex& c2) // 返回不写引用,因为不希望改c1的内容,
{Complex temp;temp.x = c2.x + this->x;temp.y = c2.y + y;return temp;
}Complex operator-(const Complex& c1, const Complex& c2) // 没有this指针,所以要把对象传进去
{Complex t;t.x = c1.x - c2.x;t.x = x + c2.x; // error,因为没有this指针t.y = c1.y - c2.y;return t;
}int main()
{Complex c1;Complex c2(1.1, -2.2);Complex c3(1.3, 4);cout << "\nc1="; c1.print;cout << "\nc2="; c2.print;cout << "\nc3="; c3.print;c1.add(c2); // c1 + c2cout << "\nafter add(), c1= "; c1.print;c1 += c2; // 运算符重载,和上面的实现功能一样,两个参数cout << "\nafter +=c2, c1= "; c1.print;c3 = c1 + c2; // 等号有缺省的运算符函数,加号没有,两个参数cout << "\nafter c3=c1+c2, c3= "; c3.print;c3 = c1 - c2; // 使用友元函数(c1 + c2 + c3); // 如果operator+(const Complex& c2)函数返回值为void的,则这一行代码错误return 0;
}// 除了感叹号的点,其余有点的运算符都不能做重载// "?:"运算符
int getmax(int x, int y)
{return (x > y) ? x : y;
}// "&="运算符
c3 = c1 & c2;
c1 &= c2;M1 = M1 * M2;

输入输出重载

#include <iostream>
using namespace std;class Complex
{
private:double x, y;public:Complex(double xx = 0, double yy = 0);					// 如果不写参数,则默认他的xx和yy都默认为0,默认调用缺省构造函数friend ostream &operator<<(ostream &, const Complex &); // 重载<<,只能用友元函数,因为ostream不是Complex类型,所以不能用成员函数实现friend istream &operator>>(istream &, Complex &); // 重载>>
};Complex::Complex(double xx = 0, double yy = 0) // 如果不写参数,则默认他的xx和yy都默认为0
{x = xx;y = yy;
}ostream &operator<<(ostream &o, const Complex &c)
{o << c.x;if (c.y > 0){o << "+" << c.y << 'i';}if (c.y < 0){o << c.y << 'i';}return o;
}istream &operator>>(istream &, const Complex &)
{}int main()
{Complex c1;Complex c2(1.1, -2.2);Complex c3(1.3, 4);cout << c1 << c2;return 0;
}

期末

// 范围:类,对象和数组,继承,构造,析构,静态
// 虚继承,多态,多重继承,纯虚函数,运算符重载,深拷贝,虚函数// 纯虚函数,定义一个基类的指针,可以通过这个指针访问子类的函数,前提是父类的同样的函数前面加上virtual,纯虚函数是让父类的函数等于零
// 深拷贝,在类里面拷贝构造,运算符重载的等号
// 对象数组,类里面有一个数组的对象#include <iostream>
#include <cstring>
using namespace std;class A
{
private:char *name;int i;
public:// A() {cout << "constuct A";}// ~A() {cout << "destruct A";}A(const char*);~A();A(const A&); // 拷贝构造A& operator=(const A&); // 运算符重载void print() {cout << "this is class A\n";}// virtual void print() {cout << "this is class A\n";}// void print() = 0; // 纯虚函数不能有实例,可以有指针,它的子类必须实现这个函数
};A::A(const char* n)
{name = nullptr;size_t size = strlen(n);name = new char[size + 1];cout << "allocate memory for name\n";strncpy(name, n, size);cout << "construct A : " << name << endl;
}A::~A()
{cout << "destruct A : " << name << endl;delete[] name;
}A::A(const A& a)
{// 需要释放最开始构造申请的空间if (name != nullptr){delete[] name;}name = a.name; // 错误,此为浅拷贝size_t size = strlen(a.name); // 深拷贝,自己申请空间strncpy(name, a.name, size);
}class B : public A
{
public:void print() {cout << "this is class B\n";}
};class C : public A
{
public:void print() {cout << "this is class C\n";}
};class D : public A
{
public:
};int main()
{A *p, b[5];p = new A[5];cout << b[2].i;cout << (*(p + 2)).i;delete[] p;A a("OOP class"), *ap;A b("class 2");A b(a); // 调用拷贝构造函数A b = a; // 调用拷贝构造函数cout << "a.name=" << (void*)a.name << "b,name=" << (void*)b.name << endl; // 打印地址a = b; // 析构会出错cout << "a.name=" << (void*)a.name << "b,name=" << (void*)b.name << endl;// B b;// C c;// D d; // 错误,因为没有实现print函数a.print(); // 打印A的信息ap = &a;ap -> print(); // 打印A// ap = &b;ap -> print(); // 打印A,因为是静态联编,根据ap的类型调用其的类的函数,1// 动态联编,根据指向的数据类型调用其的函数// ap = &b;// ap -> print(); // 打印B return 0;
}

比较生日

#include <iostream>
using namespace std;struct CDate
{int y, m, d;
};class CPerson
{
private:CDate birthday;public:bool cmp(CDate c) // 比较谁的年龄更大{long l1, l2;l1 = birthday.y * 10000 + birthday.m * 100 + birthday.d;l2 = c.y * 10000 + c.m * 100 + c.d;return l1 > l2;}
};int main()
{CPerson p1, p2;return 0;
}

多重继承

#include <iostream>
using namespace std;class Person
{
protected:string name;Person(string n) {name = n;}
}class Student : virtual public Person // 虚继承
{
protected:int id;
public:// 如果提供了有参构造函数,系统不会提供缺省构造函数,如果没有提供有参构造函数,则系统会提供一个缺省的构造函数Student() : Person("") {} // 派生类必须调用父类的构造函数Student(string n, int i) : Person(n), id(i) {cout << "CS\n";} // 标准格式,派生类必须调用父类的构造函数~Student() {cout << "DS\n";}void print() {cout << name << id;}
};class Teacher : virtual public Person
{
protected:double salary;
public:Teacher(string, double) : Person(n){salary = s; cout << "CT\n";} // 不标准~Teacher() {cout << "DT\n";}void print() {cout << name << salary;}
};// 先执行Student的构造函数,再执行Teacher的构造函数,先析构Teacher再析构Student,顺序由此决定
class SJ : public Student, public Teacher // 记得加上public,否则默认private
{
public:SJ(string, int, double);~SJ() {cout << "Dsj\n";}void print();
};SJ::SJ(string n, int i, double s) // 要给父类提供参数,用标准格式初始化// 必须给祖先类实现构造函数: Person(n), Student(n, i), Teacher(n, s) // 如果不写Student(n, i),则会调用Student的无参构造函数
{cout << "Csj\n";
}void SJ::print()
{cout << name << id << name2 << salary;print1(); // 结果和上面相同print2();// 或者预操作Student::print();Teacher::print();cout << name << id << salary; // error,因为有两个类// 使用预操作cout << Teacher::name << id << salary; // 对cout << name << id << salary; // 对
}int main()
{// Student s;// Teacher t("zhang", 20000.0);SJ sj("li", 20230001, 4000.0);return 0;
}

相关文章:

C++期末整理

课堂笔记 构造与析构 #include <iosteam> #include <cstring> using namespace std;struct Date {int y, m, d;void setDate(int, int, int);Date(int yy, int mm, int dd) {y yy, m mm, d dd;} };class Student { private:char* name;Date birthday; public:…...

技术派Spring事件监听机制及原理

Spring事件监听机制是Spring框架中的一种重要技术&#xff0c;允许组件之间进行松耦合通信。通过使用事件监听机制&#xff0c;应用程序的各个组件可以在其他组件不直接引用的情况下&#xff0c;相互发送和接受消息。 需求 在技术派中有这样一个需求&#xff0c;当发布文章或…...

秋招突击——设计模式补充——简单工厂模式和策略模式

文章目录 引言正文简单工厂模式策略模式策略模式和工厂模式的结合策略模式解析 总结 引言 一个一个来吧&#xff0c;面试腾讯的时候&#xff0c;问了我单例模式相关的东西&#xff0c;自己这方面的东西&#xff0c;还没有看过。这里需要需要补充一下。但是设计模式有很多&…...

SwiftUI中List的liststyle样式及使用详解添加、移动、删除、自定义滑动

SwiftUI中的List可是个好东西&#xff0c;它用于显示可滚动列表的视图容器&#xff0c;类似于UITableView。在List中可以显示静态或动态的数据&#xff0c;并支持垂直滚动。List是一个数据驱动的视图&#xff0c;当数据发生变化时&#xff0c;列表会自动更新。针对List&#xf…...

PostgreSQL的系统视图pg_stats

PostgreSQL的系统视图pg_stats pg_stats 是 PostgreSQL 提供的一种系统视图&#xff0c;用于展示当前数据库中的统计信息。这些统计信息由数据库内部的自动统计过程通过 ANALYZE 命令收集&#xff0c;它们帮助查询规划器做出更好的执行决策&#xff0c;从而优化查询性能。 pg…...

UML2.0-系统架构师(二十四)

1、&#xff08;重点&#xff09;系统&#xff08;&#xff09;在规定时间内和规定条件下能有效实现规定功能的能力。它不仅取决于规定的使用条件等因素&#xff0c;还与设计技术有关。 A可靠性 B可用性 C可测试性 D可理解性 解析&#xff1a; 可靠性&#xff1a;规定时间…...

leetcode 152. 乘积最大子数组「贪心」「动态规划」

152. 乘积最大子数组 题目描述&#xff1a; 给你一个整数数组nums&#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff0c;并返回该子数组所对应的乘积 思路1&#xff1a;贪心 由于 n u m s [ i ] nums[i] nums[i]都是整数&#xff0c;所以多乘一些数肯定不会让绝…...

Android项目目录结构

Android项目目录结构 1. 顶层目录2. 重要的顶层文件和目录3. app模块目录结构4. 重要的**app**模块文件和目录5. 典型的 **build.gradle** 文件内容 典型的Android项目结构的详细介绍。 1. 顶层目录 MyAndroidApp/ ├── .gradle/ ├── .idea/ ├── app/ ├── build/ ├…...

网络安全--计算机网络安全概述

文章目录 网络信息系统安全的目标网络安全的分支举例P2DR模型信息安全模型访问控制的分类多级安全模型 网络信息系统安全的目标 保密性 保证用户信息的保密性&#xff0c;对于非公开的信息&#xff0c;用户无法访问并且无法进行非授权访问&#xff0c;举例子就是&#xff1a;防…...

用requirements.txt配置环境

1. 在anaconda创建环境 创建Python版本为3.8的环境&#xff0c;与yolov5所需的包适配。 2. 在Anaconda Prompt中激活环境 (base) C:\Users\吴伊晴>conda activate yolov5 3. 配置环境 用指定路径中的requirements.txt配置环境。 (yolov5) C:\Users\吴伊晴>pip insta…...

APP渗透-android12夜神模拟器+Burpsuite实现

一、夜神模拟器下载地址&#xff1a;https://www.yeshen.com/ 二、使用openssl转换证书格式 1、首先导出bp证书 2、将cacert.der证书在kali中转换 使用openssl生成pem格式证书,并授予最高权限 openssl x509 -inform der -in cacert.der -out cacert.pem chmod 777 cacert…...

源码扭蛋机开发初探

在软件开发的世界里&#xff0c;创新总是层出不穷。今天&#xff0c;我们将一起探讨一个有趣而富有创意的项目——源码扭蛋机。源码扭蛋机&#xff0c;顾名思义&#xff0c;就是将传统的扭蛋机概念与代码编程相结合&#xff0c;让开发者们在扭动的过程中随机获得各种有趣的、实…...

Patch SCN使用说明---惜分飞

软件说明 该软件是惜分飞&#xff08;https://www.xifenfei.com&#xff09;开发&#xff0c;仅用来查看和修改Oracle数据库SCN(System Change Number),主要使用在数据库因为某种原因导致无法正常启动的情况下使用该工具进行解决.特别是Oracle新版本中使用隐含参数,event,orad…...

【微服务架构的守护神】Eureka与服务熔断深度解析

标题&#xff1a;【微服务架构的守护神】Eureka与服务熔断深度解析 在微服务架构中&#xff0c;服务的数量众多&#xff0c;网络请求的复杂性也随之增加&#xff0c;这使得系统的稳定性面临挑战。服务熔断作为一种保护机制&#xff0c;能够在服务出现问题时及时切断请求&#…...

使用label-studio对OCR数据进行预标注

导读 label-studio作为一款数据标注工具相信大家都不陌生&#xff0c;对于需要进行web数据标注协同来说应该是必备工具了&#xff0c;标注的数据类型很全涉及AI的各个任务(图像、语音、NLP、视频等)&#xff0c;还支持自定义涉及模版。 然而&#xff0c;我们在标注数据的过程…...

嵌入式linux sqlite3读写demo

以下是一个简单的C语言程序&#xff0c;使用SQLite数据库进行读写操作的示例。请确保您已经安装了SQLite3库。 #include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColNam…...

vue实现搜索文章关键字,滑到指定位置并且高亮

1、输入搜索条件&#xff0c;点击搜索按钮 2、滑到定位到指定的搜索条件。 <template><div><div class"search_form"><el-inputv-model"searchVal"placeholder"请输入关键字查询"clearablesize"small"style&quo…...

Stable Diffusion与AI艺术:探索人工智能的创造力

引言 随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;AI艺术逐渐走进了公众视野。尤其是近年来&#xff0c;Stable Diffusion等技术的出现&#xff0c;显著提升了AI在艺术创作领域的表现力和创造力。这篇文章将深入探讨Stable Diffusion技术的工作原理、应…...

华为HCIP Datacom H12-821 卷26

1.单选题 在VRRP中&#xff0c;同一备份组的设备在进行VRRP报文认证时&#xff0c;以下哪一参数不会影响Master设备和Backup设备认证协商结果 A、认证字 B、优先级 C、认证方式 D、VRRP版本 正确答案&#xff1a; B 解析&#xff1a; 优先级只会影响谁是主谁是备&…...

golang 获取系统的主机 CPU 内存 磁盘等信息

golang 获取系统的主机 CPU 内存 磁盘等信息 要求 需要go1.18或更高版本 官方地址&#xff1a;https://github.com/shirou/gopsutil 使用 #下载包 go get github.com/shirou/gopsutil/v3/cpu go get github.com/shirou/gopsutil/v3/disk go get github.com/shirou/gopsuti…...

Infinitar链游新发展新机遇

区块链游戏市场在近年来经历了显著增长&#xff0c;吸引了大量的投资和关注。随着加密货币和NFT&#xff08;非同质化代币&#xff09;概念的普及&#xff0c;越来越多的投资者、游戏开发者和看到了区块链技术在游戏领域的应用潜力&#xff0c;纷纷涌入市场。区块链游戏的用户量…...

Figma 被爆出它剽窃了苹果的设计后撤下了AI工具Make Designs

Figma是一款流行的界面设计工具&#xff0c;最近它推出了一个名为Make Designs的新功能&#xff0c;这个功能利用人工智能帮助用户快速设计应用程序界面。但是&#xff0c;这个工具生成的设计竟然和苹果公司的iOS天气应用非常相似&#xff0c;这让外界怀疑Figma是否剽窃了苹果的…...

ERROR | Web server failed to start. Port 8080 was already in use.

错误提示&#xff1a; *************************** APPLICATION FAILED TO START ***************************Description:Web server failed to start. Port 8080 was already in use.Action:Identify and stop the process thats listening on port 8080 or configure thi…...

C++ 类和对象 构造函数

一 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 例&#xff1a; #include <iostream> class Empty {// 空类&#xff0c;什么成员都没有 }; 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&a…...

纯javascript实现图片批量压缩打包zip下载后端ThinkPHP多国语言切换国际站

最近在做一个多国语言的工具站&#xff0c;需要实现多国语言切换&#xff0c;说到多国语言站&#xff0c;肯定是有2种方式&#xff0c;第一是子域名&#xff0c;第二就是子目录。根据自己的需要来确定。 后台配置如下&#xff1a; 前台显示&#xff1a; 前端纯javascript实现…...

使用ChatGPT写论文,只需四步突破论文写作瓶颈!

欢迎关注&#xff0c;为大家带来最酷最有效的智能AI学术科研写作攻略。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥&#xff08;yida985&#xff09;交流 地表最强大的高级学术AI专业版已经开放&#xff0c;拥有全球领先的GPT学术科研应用&#xff0c;有兴趣的朋友可…...

神领物流项目第一天

文章目录 聚焦快递领域首先第一个是验证码模块流程登录接口权限管家 聚焦快递领域 首先第一个是验证码模块流程 首先生成验证码的流程 可以使用工具类去生成验证码 LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(160, 60, 4, 26);// 获取值然后存入redis中 strin…...

[作业]10 枚举-排列类

作业&#xff1a; 已做&#xff1a; #include <iostream> using namespace std; int n; int a[100]; void func(int ,int); int main(){cin>>n;func(0,n);return 0; } void func(int k,int m){if(k>m-1){for(int i0;i<m;i){cout<<a[i];}cout<<en…...

vue2(vue-cli3x[vue.config.js])使用cesium新版(1.117.0)配置过程

看来很多解决方法都没有办法&#xff0c;最后终于。呜呜呜呜 这里我用的是vue-cli去搭建的项目的vue2 项目&#xff0c;其实不建议用vue2搭配cesium。因为目前cesium停止了对vue2的版本更新&#xff0c;现在默认安装都是vue3版本&#xff0c;因此需要控制版本&#xff0c;否则…...

【深度学习】常用命令行指令汇总

这些指令对于管理深度学习环境、监控资源使用、调试程序等方面 查看显卡使用情况 要实时监控NVIDIA显卡的状态,可以使用命令: nvidia-smi -l 1这条命令会每秒刷新一次显卡的使用情况,包括GPU利用率、显存使用情况等。 查看当前Python环境 查看当前使用的Python环境,可…...

谷粒商城学习-11-docker安装redis

文章目录 一&#xff0c;拉取Redis镜像1&#xff0c;搜索Redis的Docker镜像2&#xff0c;拉取Redis镜像3&#xff0c;查看已经拉取的镜像 二&#xff0c;创建、启动Redis容器1&#xff0c;创建redis配置文件2&#xff0c;创建及运行Redis容器3&#xff0c;使用docker ps查看运行…...

C++:类继承是什么,怎么继承

一、类继承是什么 首先了解什么是基类&#xff0c;什么是派生类 在面向对象编程中&#xff0c;基类&#xff08;Base Class 或 Superclass&#xff09;是一个类的模板&#xff0c;它定义了一些通用的属性和行为。子类&#xff08;Derived Class 或 Inheritance&#xff09;可…...

期权学习必看圣书:《3小时快学期权》要在哪里看?

今天带你了解期权学习必看圣书&#xff1a;《3小时快学期权》要在哪里看&#xff1f;《3小时快学期权》是一本关于股票期权基础知识的书籍。 它旨在通过简明、易懂的语言和实用的案例&#xff0c;让读者在短时间内掌握股票期权的基本概念、操作方法和投资策略。通过这本书&…...

Keepalived 双机热备

1. Keepalived 双机热备 keepalived主要用来提供故障切换&#xff08;failover&#xff09;和健康检查&#xff08;Health Checking&#xff09;。 1.2 Keepalived 热备方式 Keepalived 采用VRRP &#xff08;Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗…...

基于React和TypeScript的开源白板项目(Github项目分享)

在学习前端开发的过程中&#xff0c;有时候我们需要一些有趣的项目来提升我们的技能。今天我要给大家介绍的是一个非常酷的项目——NinjaSketch&#xff0c;这是一个用React和TypeScript构建的简易白板工具。这个项目使用了Rough.js来实现手绘风格的效果。尽管这个应用不是响应…...

1019记录

人瑞 - SDK - 外派米哈游 1&#xff0c;接口测试的工具 回答的是postman&#xff0c; 改进&#xff1a;JMeter 2&#xff0c;接口502&#xff0c;什么问题导致的&#xff1f;如何定位&#xff1f; 参考答案&#xff1a;502错误定义&#xff1a;是网关错误&#xff0c; 通俗…...

详细设计与概要设计区别-慧哥充电桩开源系统

概要设计更侧重于系统的整体构架和模块划分&#xff0c;而详细设计则关注具体模块的实现细节。在软件开发过程中&#xff0c;这两个阶段虽然紧密相关&#xff0c;但它们各自有着不同的目标和方法。以下是具体分析&#xff1a; 目标 概要设计&#xff1a;概要设计关注系统整体架…...

vue3 引入百度地图的三种方式

本次也是正好写了一个基于VUE3和百度地图的设计&#xff0c;但奈何第一次使用百度地图&#xff0c;在学习的途中遇到了很多问题&#xff0c;也发现网上的材料相对较少&#xff0c;因此做出了一些小总结&#xff0c;后续还会更新。 一、直接引入 直接在public中的index.html中进…...

鸿蒙开发设备管理:【@ohos.usb (USB管理)】

USB管理 本模块主要提供管理USB设备的相关功能&#xff0c;包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import …...

Golang | Leetcode Golang题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…...

ELK日志系统和Filebeat采集器的学习总结

ELK是ElasticSerach、Logstash、Kina Logstash负责采集数据&#xff0c;Logstash有三个插件&#xff0c;input、filter、output&#xff0c;filter插件作用是对采集的数据进行处理&#xff0c;过滤的&#xff0c;因此filter插件可以选&#xff0c;可以不用配置。 ElasticSear…...

QML-Grid和OpacityMask

一个格子条&#xff0c;点击缩短 import QtQuick 2.0 import QtQuick.Window 2.12 import QtQuick.Controls 2.5 //导入 import QtGraphicalEffects 1.12Window {id:windowwidth: 600height: 500color: "white"visible: trueGrid {visible: falseid:gridwidth:405he…...

MySQL的并发控制、事务、日志

目录 一.并发控制 1.锁机制 2.加锁与释放锁 二.事务&#xff08;transactions&#xff09; 1.事物的概念 2.ACID特性 3.事务隔离级别 三.日志 1.事务日志 2.错误日志 3.通用日志 4.慢查询日志 5.二进制日志 备份 一.并发控制 在 MySQL 中&#xff0c;并发控制是确…...

CNN文献综述

卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;是深度学习领域中的一种重要模型&#xff0c;主要用于图像识别和计算机视觉任务。其设计灵感来自于生物学中视觉皮层的工作原理&#xff0c;能够高效地处理图像和语音等数据。 基本原理…...

python语句前面有一个$是什么意思

“$”是汇编语言中的一个预定义符号&#xff0c;等价于当前正汇编到的段的当前偏移值。例如&#xff1a;指令“jmp $3”中的“$”表示当前这条指令在代码段中的偏移量。 代表当前指令的地址&#xff0c;如&#xff1a; data segment str1 db a,b,c,d leng equ $-str 就是当前地…...

wsl安装Linux系统到指定位置

默认情况下,wsl安装的系统,会安装到系统C盘,长期下去,很容易把C盘的空间消耗完,从而影响系统的正常运行,所以我建议是将wsl所有的系统都安装到其它磁盘中,便于维护。 1、导出镜像 通过wsl -l -v 查看当前已安装的系统版本。 导出到当前目录位置,也可以指定目录位置。 w…...

[笔记] 高等数学在各工程门类的典型应用场景

1.应用场景 1.微积分似乎是在解算椭圆方程中引入的&#xff1f;但是这个数学工具第一次应用于现实的工程问题是什么时候&#xff1f;什么场景&#xff1f;什么问题&#xff1f; 微积分的发展确实与椭圆方程有关&#xff0c;但它最初的应用场景远不止于此。 微积分首次被应用…...

刀片服务器和机架式服务器有何区别

刀片服务器和机架式服务器有何区别 一、物理设计&#xff1a; 刀片服务器&#xff1a;刀片服务器是一种相对较轻薄的服务器设计&#xff0c;其物理形状类似于刀片&#xff0c;通常插入到专用的刀片机箱中。每个刀片通常包含一个或多个服务器节点&#xff0c;共享一些基本的资源…...

SQLyog脚本无限试用重置脚本

文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie&#xff0c;但是网上的没看到很好使的&#xff0c;直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key&#xff0c;可能跟你的不一样&#xff0c;如果不一样&#xff0c;请替换…...

代码随想录训练营第二十九天 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列

第一题&#xff1a; 原题链接&#xff1a;134. 加油站 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 需要三个变量&#xff0c;一个变量start记录结果也就是出发的第一个加油站&#xff0c;一个变量curSum来记录此时加油耗油后剩余的油量&#xff0c;如果发现c…...