C/C++关键字

news2024/10/6 14:02:57

C/C++关键字

  • 【1】extern "C"
  • 【2】asm
  • 【3】关键字auto
  • 【4】break语句
  • 【5】catch 语句
  • 【6】关键字class
  • 【7】关键字const
  • 【8】#if
  • 【9】#pragma once
  • 【10】#pragma pack(1)
  • 【11】#pragma pack(4)
  • 【12】explicit
  • 【】 continue语句
  • 【13】关键字enum
  • 【14】friend
  • 【15】goto语句
  • 【16】关键字inline
  • 【17】关键字mutable
  • 【18】关键字namespace
  • 【19】关键字operator 用于重载函数
  • 【20】private
  • 【21】protected
  • 【22】public
  • 【23】register 关键字
  • 【24】reinterpret_cast <type-id>(obj)
  • 【25】static_cast<type> (object)
  • 【26】Template关键字
  • 【27】关键字typename
  • 【28】关键字 this
  • 【29】关键字typedef | typeid
  • 【30】Union 联合体
  • 【31】volatile 关键字
  • 【32】源码

在这里插入图片描述


【1】extern “C”

extern "C"  //用于连接指定路径 以C语言方式去编译
{
    #include "exhead.h"
}

【2】asm

asm :asm允许你在你的代码中直接插入汇编语言指令, 各种不同的编译器为这一个指令允许不一致形式, 比如:

asm {
       instruction-sequence	//指令顺序
}
asm( instruction );//插入汇编指令

【3】关键字auto

是用来声明完全可选择的局部变量的 自动转为对应数据类型

【4】break语句

只能跳出本层循环,假如你要跳出一个三重嵌套的循环,你就要使用包含其它的逻辑或者用一个goto语句跳出这个嵌套循环.

【5】catch 语句

通常通过 throw 语句捕获一个异常.

【6】关键字class

允许你创建新的数据类型. class-name 就是你要创建的类的名字

【7】关键字const

用来告诉编译器一个一旦被初始化过的变量就不能再修改.

【8】#if

#if defined TEST  //如果定义了TEST宏
    #pragma message  "这里打印TEST=10" 
    //自定义编译信息   //编译时看见,运行的时候是看不见的  通过:g++ -E main.cpp -o mian.i 查看预处理文件
#endif

【9】#pragma once

用于头文件只能被编译一次,这个文件不小心写了两次头文件 在这个头文件哪里定义可以解决

【10】#pragma pack(1)

在结构体 用于指定内存对齐的标准 pack(1)

typedef struct info
{
    int a;  //4
    char d; //1
    //对齐:a:4: 1 1 1 1  d:1 :1     以1为对齐的最小值  超过的往后排布 4+1=5  
}node_t;

【11】#pragma pack(4)

一般对齐标准不能超过4字节

typedef struct info1
{
    int a;  //4
    node_t d; //4
    float b; //4
    double c; //8
    //对齐:4+8+4+8=24
}node_1;

【12】explicit

explicit

当构造函数被指定为explicit的时候,将不会自动把构造函数作为转换构造函数 防止隐式类型转化,编译器自动调用拷贝初始化的行为 ;
这仅仅用在当一个初始化语句参数与这个构造函数的形参匹配的情况. 例子:

 AA(int a){cout<<"call me"<<endl;}
 void  f( AA cp) {}   //外部函数  
 int main(){
     f(1);  //被隐式转化为F(AA(1)),本来是1变成了AA(1)是拷贝初始化 call me被打印
 }

【】 continue语句

用来结束这次循环在一个循环语句中(跳过当前循环,不是跳出循环)
例如,下面这段代码会显示所有除了0之外0-4的所有数字:

for( int i = 0; i < 5; i++ ) {
 if( i == 2 ) {
   continue;
 }
 cout << i << " "<<endl;
}

【13】关键字enum

用来创建一个包含多个名称元素的名称表.var-list 是可选的. 例如:

enum color {red, orange, yellow, green=6, blue, indigo, violet}; //类似:{0,1,2,3,4,...........}
color c1 = indigo;  //定义枚举变量c1:   判断是否和枚举里面的值相等
if( c1 == indigo ) {
  cout << "c1 is indigo  :" <<indigo<< endl; //8
}
cout<<red<<endl;  //直接打印枚举值  0
cout<<green<<endl;  //注意注意:这里对枚举值进行了初始化,后面的值在这个值上递增 6
cout<<blue<<endl;  //7
cout<<sizeof(color)<<endl;  //4字节
cout<<sizeof(c1)<<endl;  //可以发现枚举大小是4字节

【14】friend

关键字friend: 允许类或函数访问一个类中的私有数据(函数和变量). (友元类、 友元函数)

【15】goto语句

可以完成从当前位置到指定标志位的跳转.使用goto语句要考虑有害性,所以它不经常使用.
常用:出错时结束当前函数
例如,
goto可以用来跳出多重嵌套 for 循环,它比额外的逻辑性跳出更具有时效性.

【16】关键字inline

请求编译器给一个函数扩展空间,它向这个函数发出一条插入代码的call.
当函数里面有 static 数据, 循环, switches, 或者是递归的时候不给予内联.
当一个函数声明包含在一个类声明里面时,编译器会尝试的自动把函数内联.

【17】关键字mutable

忽略所有const 语句.一个属于const对象的mutable 成员(类里面的私有变量)可以被修改.
在类里面定义mutable int a; 类里面有一个函数,
int fun() const; //函数内的数据类型只能是只读,但是现在: a可以再只读函数里面++ –
等操作 sh->fun(); //a=2

【18】关键字namespace

  namespace name {
    declaration-list;
  }

关键字namespace允许你创建一个新的空间.名字由你选择,忽略创建没有命名的名字空间.一旦你创建了一个名字空间,
你必须明确地说明它或者用关键字using. 例如:

namespace CartoonNameSpace {
  int HomersAge;
  void incrementHomersAge() {
    HomersAge++;
  }
}
int main() {
  ...
  CartoonNameSpace::HomersAge = 39;  //通过空间名初始化和函数调用, ::(域运算符)  保证数据的安全性
  CartoonNameSpace::incrementHomersAge();
  cout << CartoonNameSpace::HomersAge << endl;
  ...
}

【19】关键字operator 用于重载函数

对于一元的操作, parameter-list(参数列表) 应当为空 对于二元的操作,在operator右边的
parameter-list(参数列表) 应当包含操作数 (在operand 左边的被当作 this通过). 你不能用#, ##, .,
:, .*, 或者 ? 标志重载.

【20】private

属于私有类的数据只能被它的内部成员访问,除了friend 使用.
关键字private
也能用来继承一个私有的基类,所有的公共和保护成员的基类可以变成私有的派生类.

【21】protected

保护数据对于它们自己的类是私有的并且能被派生类继承.

关键字keyword 也能用于指定派生,所有的公共和保护成员的基类可以变成保护的派生类.

【22】public

在类中的公共数据可以被任何人访问.关键字public也能用来指定派生, 所有的公共和保护成员的基类可以变成保护的派生类.

【23】register 关键字

register 请求编译器优化它定义的变量,并且通常这种优化比人工优化的好.

register int mn=100; //寄存器优化
cout<<"mn="<<mn<<endl;

【24】reinterpret_cast (obj)

操作能把一种数据类型改变成另一种.它应当被用在两种不可调和的指针类型之间.
type-id:必须是一个指针、引用、算数类型、函数指针、成员指针;注意:没有进行二进制的转换

【25】static_cast (object)

关键字static_cast 用来在两个不同类型之间进行强制转换,并且没有运行时间检查.

static int kk=97;
char nn = static_cast<char >(kk); //'a'=97  //将静态变量转化为其他类型
cout<<"nn="<<nn<<endl;

【26】Template关键字

能用来创建一个对未知数据类型的操作的函数模板.这个通过用其它数据类型代替一个占位符data-type 来实现.

【27】关键字typename

能用来在中 template 描述一个未定义类型或者代替关键字class. template ;
template

【28】关键字 this

指向当前对象.所有属于一个 class 的函数成员都有一个this 指向.

【29】关键字typedef | typeid

允许你从一个现有的类型中创建一个新类型.
typeid( object ); typeid 操作返回给一个type_info 定义过的对象的那个对象的类型.

typedef int DATA;
DATA ff=100;
cout<<"ff="<<ff<<endl;
double i;
//打印了变量的首个字符 ,,可以判断变量类型
float f;
cout<<"i的类型是"<<typeid(i).name()<<endl;
cout<<"f="<<typeid(f).name()<<endl;

【30】Union 联合体

:类似于 class,除了所有的成员分享同一内存外它的缺省值更像公共类型. 例如:

union Data {
  int i;
  char c;
};    //用谁其他就被覆盖

【31】volatile 关键字

:volatile在描述变量时使用,阻止编译器优化那些以valatile修饰的变量
volatile被用在一些变量能被意外方式改变的地方,修饰的变量是变化无常的,但是需要变量的值赋值时,必须去变量的地址空间读取,在赋值给其他变量
例如:抛出中断 读写屏障 c常在线程中修饰变量 每一个线程都可以改变volatile修饰的变量,
为了实时更新改变的值,保证每一个线程准确无误的访问变量 ,所以使用关键字修饰变量 这些变量若无volatile可能会和编译器执行的优化相冲突.


【32】源码

#include <stdio.h>
#include <iostream>
#include <string.h>
#define TEST 10
extern "C"  //用于连接指定路径
{
    #include "exhead.h"
}
using namespace std;


//asm :asm允许你在你的代码中直接插入汇编语言指令, 各种不同的编译器为这一个指令允许不一致形式, 比如:
/*   
    asm {
            instruction-sequence
    }
    asm( instruction );


*/
//关键字auto是用来声明完全可选择的局部变量的 自动转为对应数据类型


//break语句只能跳出本层循环,假如你要跳出一个三重嵌套的循环,你就要使用包含其它的逻辑或者用一个goto语句跳出这个嵌套循环.


//catch 语句通常通过 throw 语句捕获一个异常. 


//关键字class允许你创建新的数据类型. class-name 就是你要创建的类的名字


//关键字const用来告诉编译器一个一旦被初始化过的变量就不能再修改.




#if defined TEST  //如果定义了TEST宏
    #pragma message  "这里打印TEST=10" //自定义编译信息   //编译时看见,运行的时候是看不见的  通过:g++ -E main.cpp -o mian.i 查看预处理文件
#endif
//#pragma once    //用于头文件只能被编译一次,这个文件不小心写了两次头文件  在这个头文件哪里定义可以解决


#pragma pack(1)   //在结构体  用于指定内存对齐的标准  pack(1)
typedef struct info
{
    int a;  //4
    char d; //1
    //对齐:a:4: 1 1 1 1  d:1 :1     以1为对齐的最小值  超过的往后排布 4+1=5  
}node_t;
#pragma pack(4)   //一般对齐标准不能超过4字节
typedef struct info1
{
    int a;  //4
    node_t d; //4
    float b; //4
    double c; //8
    //对齐:4+8+4+8=24
}node_1;
//dynamic:  主要用于类对象之间的强转
class AA
{
private:
    
public:
    explicit AA(/* args */)
    {
        cout<<"AA"<<endl;
        /*
            explicit 
            当构造函数被指定为explicit的时候,将不会自动把构造函数作为转换构造函数
            防止隐式类型转化,编译器自动调用拷贝初始化的行为
            这仅仅用在当一个初始化语句参数与这个构造函数的形参匹配的情况.
            例子:
            AA(int a){cout<<"call me"<<endl;}
            void  F( AA cp) {}   //外部函数  
            int main(){
                f(1);  //被隐式转化为F(AA(1)),本来是1变成了AA(1)是拷贝初始化 call me被打印


            }
        */
    }
    virtual ~AA()
    {
        cout<<"~AA"<<endl;
    }
    virtual void  eat()=0;  //纯虚函数
};


class BB:public AA
{
public:
    virtual void eat()  //重写父类方法
    {
        cout<<"压十啦你"<<endl;
    }
    void show(int a)
    {
        this->a =a;
        cout<<"show"<<endl;
    }
    BB(/* args */)
    {
        cout<<"BB"<<endl;
    }
    ~BB()
    {
        cout<<"~BB"<<endl;
    }
    void fun() const
    {
        ++a;  //本来a不能这样, mutable关键字修饰后可以
        cout<<"a="<<a<<endl;
    }
private:
    mutable int a; //a被修饰为一直可变
};


typedef union lenth {
    int i;
    char c;
    double d;
    long double ld;
}un;


int main(int argc, char const *argv[])
{
    auto  a='a';
    cout<<a<<endl;
    //throw 在C++体系下用来处理异常.同try 和 catch 语句一起使用, 
    //C++ 处理异常的系统给程序一个比较可行的机制用于错误校正.
    //当你通常在用 try 去执行一段有潜在错误的代码时.在代码的某一处,
    //一个throw 语句会被执行, 这将会从try的这一块跳转到catch的那一块中去. 例如: 


    try {
      cout << "Before throwing exception" << endl;
      throw 42; //到这里就结束了,可以测试段错误
      cout << "Shouldn't ever see this" << endl;
    }  


    catch( int error ) {
      cout << "Error: caught exception " << error << endl; //捕获到:error =42
    }
    const char atr[] ="123";
    const char *p=atr; //定义一个常量指针(const *) 指向常量字符串  p存放atr的地址 
    p="321";  //p可以指向其他  
    //a="8989";  //atr只读,无法修改 
    cout<<p<<endl;
    cout<<atr<<endl;
    char const * p1=atr;  //const在*的左侧,一般就说明是常量指针 指向可变
    cout<<p<<endl;
    cout<<atr<<endl;
    char arr[]="000000";
    char  *const p2 =arr; //指针常量(*  const)  p2指向一次后,不能在指向其他  
    cout<<arr<<endl;
    cout<<p2<<endl;
   // p2=&arr[1];   错误:向只读变量‘p2’赋值
    cout<<p2<<endl;
    arr[1]='1';  //数组赋值  覆盖原来的值那个
    cout<<arr<<endl; //打印全部  arr能不能修改看谁修饰他
    char *str = const_cast<char *> (atr);  //将只读字符串常量类型转化 被const修饰的变量名
    cout<<str<<endl;

   // continue语句用来结束这次循环在一个循环语句中(跳过当前循环,不是跳出循环)
   //例如,下面这段代码会显示所有除了0之外0-4的所有数字: 


    for( int i = 0; i < 5; i++ ) {
      if( i == 2 ) {
        continue;
      }
      cout << i << " "<<endl;
    }
    //default : switch 语句中的缺省条件. 

/*
    delete 
语法: 
  delete p;             //释放申请了一个
  delete[] pArray;      //释放申请了多个

delete操作用来释放p指向的内存.这个指针先前应该被 new调用过.上面第二种形式用于删除一个数组.
*/
/*
dynamic_cast<type> (object);


关键字dynamic_cast强制将一个类型转化为另外一种类型
并且在执行运行时时检查它保证它的合法性。如果你想在两个互相矛盾的类型之间转化时
cast的返回值将为NULL.
*/
//new BB() :BB继承AA 所以打印 AA BB构造函数    一般是多继承  
AA *obj =new BB(); //注意 注意 注意:new才会创建对象  这里父类是抽象类不能创建对象
//这里的意思是父类的指针指向子类对象
obj->eat();  //父类指针 调用 打印子类成员函数的值
BB* sh =dynamic_cast<BB*>(obj); //父类的指针转化为子类的指针
sh->eat();//子类指针 调用 打印子类成员函数的值
sh->show(1);//子类指针 调用 打印子类成员函数的值
delete obj;  //只释放了父类析构函数   解决办法: 将父类析构函数设置为virtual修饰的
//delete sh;  //:段错误,是类型转化  并没有new  所以报错

    //关键字enum用来创建一个包含多个名称元素的名称表.var-list 是可选的. 例如: 
    enum color {red, orange, yellow, green=6, blue, indigo, violet}; //类似:{0,1,2,3,4,...........}
    color c1 = indigo;  //定义枚举变量c1:   判断是否和枚举里面的值相等
    if( c1 == indigo ) {
      cout << "c1 is indigo  :" <<indigo<< endl; //8
    }
    cout<<red<<endl;  //直接打印枚举值  0
    cout<<green<<endl;  //注意注意:这里对枚举值进行了初始化,后面的值在这个值上递增 6
    cout<<blue<<endl;  //7
    cout<<sizeof(color)<<endl;  //4字节
    cout<<sizeof(c1)<<endl;  //可以发现枚举大小是4字节




    //extern:引用外部变量,注意外部变量已经定义,不要重复定义(extern "C":调用外部C标准头文件)
    extern   int values;  //在这里声明,声明可以多次,且没有分配空间 
    cout<<values<<endl;   //成功获取  自定义头文件里的100


    cout<<buf<<endl; //在其他文件声明且初始化,直接打印值(会有警告C++)


    //extern:声明函数,函数名本身指向二进制的函数地址,不加extern的函数是隐式的函数,也可以调用其他文件


    //#pragma pack(1)  :  看对齐后大小
    node_t info;
    cout<<sizeof(info)<<endl; //5
    node_1 size;
    cout<<sizeof(size)<<endl;  //对齐标准:4   包括node_t的大小   //24


    //friend 
    //关键字friend: 允许类或函数访问一个类中的私有数据(函数和变量). (友元类、 友元函数)


    //goto语句: 可以完成从当前位置到指定标志位的跳转.使用goto语句要考虑有害性,所以它不经常使用.  常用:出错时结束当前函数
    //例如, goto可以用来跳出多重嵌套 for 循环,它比额外的逻辑性跳出更具有时效性. 




    //关键字inline: 请求编译器给一个函数扩展空间,它向这个函数发出一条插入代码的call.
    //当函数里面有 static 数据, 循环, switches, 或者是递归的时候不给予内联.
    //当一个函数声明包含在一个类声明里面时,编译器会尝试的自动把函数内联. 


    //关键字mutable : 忽略所有const 语句.一个属于const对象的mutable 成员(类里面的私有变量)可以被修改.
    //在类里面定义mutable int a;   类里面有一个函数,int fun() const;  //函数内的数据类型只能是只读,但是现在:
    //a可以再只读函数里面++ --  等操作
    sh->fun(); //a=2
   


/*
   namespace 
语法: 
  namespace name {
    declaration-list;
  }
关键字namespace允许你创建一个新的空间.名字由你选择,忽略创建没有命名的名字空间.一旦你创建了一个名字空间,
你必须明确地说明它或者用关键字using. 例如: 


    namespace CartoonNameSpace {
      int HomersAge;
      void incrementHomersAge() {
        HomersAge++;
      }
    }
    int main() {
      ...
      CartoonNameSpace::HomersAge = 39;  //通过空间名初始化和函数调用, ::(域运算符)  保证数据的安全性
      CartoonNameSpace::incrementHomersAge();
      cout << CartoonNameSpace::HomersAge << endl;
      ...
    }
*/
    //关键字operator 用于重载函数.
    //对于一元的操作, parameter-list(参数列表) 应当为空 
    //对于二元的操作,在operator右边的 parameter-list(参数列表) 应当包含操作数 (在operand 左边的被当作 this通过).
    //你不能用#, ##, ., :, .*, 或者 ? 标志重载. 

    //private 属于私有类的数据只能被它的内部成员访问,除了friend 使用.
    //关键字private 也能用来继承一个私有的基类,所有的公共和保护成员的基类可以变成私有的派生类.

    //protected 保护数据对于它们自己的类是私有的并且能被派生类继承.
    //关键字keyword 也能用于指定派生,所有的公共和保护成员的基类可以变成保护的派生类.

    //public 在类中的公共数据可以被任何人访问.关键字public也能用来指定派生,
    //所有的公共和保护成员的基类可以变成保护的派生类.

    //register 关键字: register 请求编译器优化它定义的变量,并且通常这种优化比人工优化的好.
    register int mn=100; //寄存器优化
    cout<<"mn="<<mn<<endl;

    //reinterpret_cast <type-id>(obj)操作能把一种数据类型改变成另一种.它应当被用在两种不可调和的指针类型之间.
    //type-id:必须是一个指针、引用、算数类型、函数指针、成员指针;注意:没有进行二进制的转换

    //static 数据类型用来给变量创建永久存储空间.静态变量在函数间调用时保持他们的值不变.
    //当用在一个类中时,所有要用到静态变量的时候这个类将把这个变量镜像过去.
     
     //static_cast<type> (object);  关键字static_cast 用来在两个不同类型之间进行强制转换,并且没有运行时间检查.
     static int kk=97;
     char nn = static_cast<char >(kk); //'a'=97  //将静态变量转化为其他类型
     cout<<"nn="<<nn<<endl;




    //Template关键字:能用来创建一个对未知数据类型的操作的函数模板.这个通过用其它数据类型代替一个占位符data-type 来实现.
    //关键字typename能用来在中 template 描述一个未定义类型或者代替关键字class.  template <class T>  ; template<typename T> 




    //关键字 this 指向当前对象.所有属于一个 class 的函数成员都有一个this 指向. 


    //关键字typedef 允许你从一个现有的类型中创建一个新类型. 
    //typeid( object );  typeid 操作返回给一个type_info 定义过的对象的那个对象的类型. 
    typedef int DATA;
    DATA ff=100;
    cout<<"ff="<<ff<<endl;
    double i;
    //打印了变量的首个字符 ,,可以判断变量类型
    float f;
    cout<<"i的类型是"<<typeid(i).name()<<endl;
    cout<<"f="<<typeid(f).name()<<endl;
    
    /*
    Union 联合体:类似于 class,除了所有的成员分享同一内存外它的缺省值更像公共类型. 例如: 


    union Data {
      int i;
      char c;
    };    用谁其他就被覆盖
    */
   cout<<sizeof(un)<<endl;  //16  long double  X86-64:  8+8
    /*
    volatile 关键字: volatile在描述变量时使用,阻止编译器优化那些以valatile修饰的变量
    volatile被用在一些变量能被意外方式改变的地方,修饰的变量是变化无常的,但是需要变量的值赋值时,必须去变量的地址空间读取,在赋值给其他变量
    例如:抛出中断  <interrupt>  读写屏障  c常在线程中修饰变量  每一个线程都可以改变volatile修饰的变量,
    //为了实时更新改变的值,保证每一个线程准确无误的访问变量  ,所以使用关键字修饰变量
    这些变量若无volatile可能会和编译器执行的优化 相冲突.
    */
    return 0;
}
//输出:
PS C:\Users\Administrator\Desktop\C语言函数集合> ./a
a
Before throwing exception
Error: caught exception 42
321
123
321
123
000000
000000
000000
010000
123
0
1
3
4
AA
BB
压十啦你
压十啦你
show
~BB
~AA
c1 is indigo  :8
0
6
7
4
4
100
djfhj
5
24
a=2
mn=100
nn=a
ff=100
i的类型是d
f=f
16
PS C:\Users\Administrator\Desktop\C语言函数集合>

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

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

相关文章

【springboot进阶】基于starter项目构建(二)构建starter项目-web

目录 一、创建 web-spring-boot-starter 项目 二、添加 pom 文件依赖 三、构建配置 1. rest模板配置 RestTemplateConfig 2. 统一异常处理 BackendGlobalExceptionHandler 3. 统一返回数据结构 4. jwt鉴权处理 5. 请求日志切面处理 WebLogAspect 6. 邮件配置 BackendM…

mysql数据同步到elasticsearch数据解决方案

mysql数据同步到elasticsearch数据解决方案 问题场景 1.分库分表后多关联或者多条件查找效率低下&#xff0c;例如2b场景的查询&#xff0c;导出等需要多条件查询&#xff0c;继续用分库分表话效率低下。 2.数据量太多需要转移非关系型数据库elasticsearch存储 3.其他数据转…

AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能,成为行走的百科全书

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

代码随想录刷题记录day40 爬楼梯+零钱兑换+完全平方数·

代码随想录刷题记录day40 爬楼梯零钱兑换完全平方数 参考&#xff1a;代码随想录 70. 爬楼梯 思想 当作完全背包问题&#xff0c;物品是1&#xff0c;2&#xff0c;可以无限次取用&#xff0c;背包的容量是n 1.dp[j]表示容量为j的背包&#xff0c;装满有dp[j]次 2.dp[j]dp…

【图像处理】opencv | 图像的二值化操作| cv2.threshold() | cv2.adaptiveThreshold()

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、cv2.threshold()阈值操作函数1.1、初见1.2、阈值不同时的效果二、cv2.adaptiveThreshold()自适应阈值操作函数2.1、初见2.2、固定blocksize,改变C值大小的实…

104-127-linux-vim-shell基础

104-linux-shell: 1.shell基础 分类&#xff1a;linux使用Bash&#xff0c;可通过vi /etc/shells查看linux支持的shell类型。 1、echo [rootlocalhost ~]#echo [选项] [输出内容] 选项:-e:支持反斜线控制的字符转换&#xff08;具体百度吧)-n:取消输出后行末的换行符号&…

Python实现ALO蚁狮优化算法优化支持向量机分类模型(SVC算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁狮优化(Ant Lion Optimizer&#xff0c;ALO)算法是Mirjalili于2015提出的一种新型元启发式群智能算法…

185.基于Django的富文本编辑器安装与使用

1.DjangoUeditor 1.1 概述 富文本编辑器&#xff0c;在web开发中必不可少&#xff0c;但是django没有自带富文本编辑器&#xff0c;因此我们需要使用第三方库&#xff0c;这里使用DjangoUeditor DjangoUditor是百度开源的在线HTML编辑器&#xff0c;功能非常强大&#xff0c;像…

VUEElement简单介绍。

目录 一、VUE 1、基本介绍 2、Vue 指令 3、生命周期 二、Element 1、基本介绍 2、Element 布局 一、VUE 1、基本介绍 ▶ 概述 Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写。 我们之前也学习过后端的框架 Mybatis &#xff0c;My…

Linux下C/C++实现类似netstat命令(列出TCP和UDP连接)

网络连接一般包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号)再加上所属进程信息pid, exe, cmdline等。其中这两项数据大多可直接读取linux /proc目录下的网络状态连接文件/proc/net/tcp、/proc/net/udp), 进程状态目录(/proc/pid/xx)。 Linux 下的/proc…

Java基于JSP的报刊订阅管理系统

随着人类的发展&#xff0c;人们对信息的获取方式也越来越多&#xff0c;虽然很多时候人们习惯了通过手机来获取各类信息&#xff0c;但是手机也逐渐的成为了危害人类健康的杀手之一&#xff0c;为了能够让大家回归到健康的生活中来&#xff0c;我开发了本系统&#xff0c;旨在…

基于jsp+mysql+ssm医药进销存管理系统-计算机毕业设计

项目介绍 为了减少传统医药进销存管理的繁杂的工作量&#xff0c;提高医药进销存管理的效率而设计开发了此系统。本系统综合各方面的需求决定采用B/S架构&#xff0c;并利用clipse搭建java开发平台。从而共同完成整个医药的设计开发。系统实现的功能主要包括&#xff1a;用户在…

java 通过InetAddress获取ip 计算机名称操作

本文属于java网络编程部分 需要你的网络编程三要素 有所了解 如果您尚未了解 可以先查看我的文章 java网络编程三要素 而 为了更好的获取和使用IP地址 java提供了InetAddress类 来到文档 首先 他在 java的net包下 所以 想用它 是需要导包的 根据文档叙述 InetAddress就是一个…

python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

聚宽 聚宽是一个做金融量化的网站&#xff0c;https://www.joinquant.com&#xff0c;登录注册&#xff0c;如果你写的文章、策略被别人采纳&#xff0c;增加积分&#xff0c;积分用于免费的回测时长。在我的策略&#xff0c;进入策略列表&#xff0c;里面有做好的策略模板可以…

Web前端105天-day40-GIT

git--版本控制系统(VCS) 目录 前言 一、版本控制系统(VCS) 二、Git中的常用概念 三、Git中的常用命令 四、分支 五、远程仓库(代码托管平台) 总结 前言 day40学习开始 一、版本控制系统(VCS) 用于项目中文件的存储、共享、历史回退、合并、代码追踪文件历史常用版本控制…

acwing基础课——spfa

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3——搜索与图论 - AcWing 基本思想&#xff1a; 一般单源最短路我们都可以用spfa算法来做&#xff0c;如果过不了再尝试其他算法。 spfa算法就是在bellman-ford算法的基础上就行优化&#xff0c;bellman-算法是每…

微信小程序|小程序事件

首先,我们在index.wxml中与index.js中添加如下代码: <button bindtap="alert">bindtap</button>Page({data: {},alert: function (event) {wx.showToast({title: 触发成功, // 标题icon: success, // 图标类型,默认successduration: 1500 // 提示窗停…

贪吃蛇复现-CoCube

需要完成下面所提及博文中里面所有前序案例&#xff1a; 从开环到闭环的旅程-CoCube 在完成如上代码之后&#xff0c;添加一个彩蛋&#xff0c;贪吃蛇的案例。 蓝桥ROS之半自动贪吃龟turtlesim版 基本上就是上述代码复现一下&#xff0c;完全没有难度的。 贪吃蛇复现-CoCubep…

程序员最关心的问题,我都帮你们问AI了

前言 最近几天互联网刮起了一阵ChatGPT风&#xff0c;起因是OpenAI发布了一个全新的聊天机器人模型—— ChatGPT&#xff0c;可以像人类交谈般回答大部分问题甚至还能直接帮你写代码。 我们先来试试让它帮我们写个代码&#xff1a; 有一丝丝的恐惧&#xff0c;害怕过两年就会失…

redis—主从,哨兵,集群

redis常见的使用方式 Redis的几种常见使用方式包括: Redis单副本;Redis多副本(主从) ;Redis Sentinel (哨兵) ;Redis Cluster;Redis自研。 使用场景: 如果数据量很少&#xff0c;主要是承载高并发高性能的场景&#xff0c;比如缓存一般就几个G的话&#xff0c; 单机足够了。…