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

嵌入式养成计划-41----C++ auto--lambda表达式--C++中的数据类型转换--C++标准模板库(STL)--list--C++文件操作

九十九、auto

99.1 概念

  • C++11引入了自动类型推导,和Python不一样,C++中的自动类型推导,需要auto关键字来引导
  • 比如 :auto a = 1.2; 会被编译器自动识别为 a 为 double 类型

99.2 作用

  • auto修饰变量,可以自动推导变量的数据类型。

99.3 注意

  1. auto修饰变量时,必须初始化
  2. auto的右值,可以是右值,可以是表达式,可以函数的返回值
  3. auto不能修饰函数的形参
  4. auto不能修饰数组
  5. auto不能修饰非静态数据成员

99.4 用途

在这里插入图片描述

  1. auto一般修饰数据类型比较冗长的类型
  2. auto还可以用于依赖函数模板的模板参数
  3. auto还可以修饰lambda表达式

例如 :

#include <iostream>
using namespace std;int fun(int a, char b, float c, int *d, char *e, bool f,int g)
{return 1+2;
}
int main()
{//定义一个函数指针,指向该函数int (*p)(int , char , float , int *, char *, bool ,int ) = fun;//auto修饰指针auto p2 = fun;return 0;
}
#include <iostream>
using namespace std;int fun(int a, char b, float c, int *d, char *e, bool f,int g)
{return 1+2;
}
//创建一个函数模板
template <typename T>
int fun2(T a)
{auto b = a;cout << typeid (b).name() << endl;
}
int main()
{//定义一个函数指针,指向该函数int (*p)(int , char , float , int *, char *, bool ,int ) = fun;//auto修饰指针auto p2 = fun;fun2(12);fun2('2');return 0;
}

一百、lambda表达式

100.1 作用

  • 当需要一个匿名的、临时的,可以捕获外界变量的函数时,可以用lambda表达式完成。

  • 一般用在函数的实参

100.2 格式

[](){}  //lambda表达式[捕获外界变量的方式](函数的形参列表)->return type{函数体内容}[] :捕获外界变量的方式1.[变量1,变量2] :值捕获,外界的变量和函数体内部捕获到的变量的值相同,但地址不同,表示不同的变量,不可以对该变量进行修改操作,如果想在函数体内修该变量的值,可以加上mutable2.[=] :值捕获,对外界所有的变量进行值捕获3.[&变量1, &变量2] :引用捕获(地址捕获),外界的变量和函数体内部捕获到的变量的值相同,地址也相同,是同一个变量,可以对变量修改操作,可以不用mutable4.[&] :引用捕获,对外界所有的变量进行引用捕获5.[=,&变量1, &变量2] :6.[变量1,变量2,&] :() :函数的形参列表->  函数的返回类型

示例 :

#include <iostream>
using namespace std;int main()
{int a = 100, b =200, c = 300;cout << a << " main  "  << &a << endl;//auto fun = [a,b]()mutable{//auto fun = [=]()mutable{//auto fun = [&a,&b](){auto fun = [&](string name = "hello")->int{cout << a << "  fun "  << &a << endl;a = 200;cout << a << " fun  "  << &a << endl;cout << c << endl;//return name; 指定返回类型,就不可以随意返回类型};cout << a << "  main "  << &a << endl;cout << fun("hello kitty") << endl;cout << a << "  main "  << &a << endl;return 0;
}

一百零一、C++中的数据类型转换

101.1 概念

  • C++中存在多种数据类型的转换方式,用于在不同的数据类型之间进行转换。

101.2 种类

以下是常见的数据类型转换方式:

  • 隐式类型转换(自动类型转换):
    这是C++编译器自动执行的类型转换,通常在表达式中出现时发生。
    例如,将较小的整数转换为较大的整数类型,将整数提升为浮点数等。
    int num_int = 10;
    double num_double = num_int;  // 隐式将int转换为double
    
  • 显示类型转换(强制类型转换)
    通过使用强制类型转换操作符来显示执行类型转换。
    这种转换可能会导致数据的截断或者精度丢失,因此要小心使用。
    1. 静态转换(static_cast):
      用于基本数据类型之间的转换
      以及父类指针/引用转换为子类指针/引用
      还可以用于不同类型的指针之间的转换
      double num_double = 3.14;
      int num_int = static_cast<int>(num_double);  // 显式将double转换为int
      
    2. 动态转换(dynamic_cast):
      通常用于多态类之间的指针或引用类型转换,确保类型安全。
      在运行时进行类型检查,只能用于具有虚函数的类之间的转换
      class Base {virtual void foo() {}
      };
      class Derived : public Base {};Base* base_ptr = new Derived;
      Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);  // 显式将基类指针转换为派生类指针
      
    3. 常量转换(const_cast):
      用于添加或移除指针或引用的常量性。它可以用来去除const限定符,但要注意潜在的未定义行为
      const int a =10; //
      int *p;
      p = &a; // 合不合法?   no
      
      const int num_const = 5;
      int* num_ptr = const_cast<int*>(&num_const);  // 去除const限定符
      
    4. 重新解释转换(reinterpret_cast):
      执行低级别的位模式转换,通常用于指针之间的类型转换。
      它可能导致未定义行为,因此要谨慎使用
      int num = 42;
      float* float_ptr = reinterpret_cast<float*>(&num);  // 重新解释转换
      
  • C风格类型转换 : 与C语言中的类型转换方式类似,包括以下几种:
    • c样式转换:
      使用强制类型转换 操作符进行转换,类似与C语言中的类型转换
      int num_int = 10;
      double num_double = (double)num_int;  // C样式强制类型转换
      
    • 函数样式转换(函数式转换):
      使用C++中的类型转换函数进行转换
      int num_int = 10;
      double num_double = double(num_int);  // C++函数样式类型转换
      

101.3 注意

需要注意的是,尽管C++提供了多种类型转换方式,
但应该谨慎使用,以避免潜在的错误和问题。
特别是在使用强制类型转换时,务必确保转换操作是安全的,以避免不必要的问题。

C++关键字 :
在这里插入图片描述

  1. asm:
    这是一个用于嵌入汇编语言代码的关键字。它允许你在C++代码中直接插入汇编指令,通常用于执行特定的底层操作。然而,由于现代C++提供了更强大的抽象和跨平台性,通常不建议使用这个关键字。
  2. explicit:
    这个关键字通常用于禁止隐式类型转换的发生。当一个构造函数被声明为explicit时,它将不会在隐式类型转换中被调用,只能在显式构造函数调用中使用。
  3. export:
    在C++中,export关键字用于指示一个模板的定义将在另一个文件中实例化。然而,在实际的C++标准中,export关键字的语法并未最终确认,并且在许多编译器中也未被实现。在C++20中,export被重新引入,但是它的主要用途是与模块化编程相关,而不是之前模板实例化的用法。
  4. goto:
    goto是一个跳转语句,允许你无条件地将程序的控制转移到指定的标签处。然而,由于使用goto会导致代码结构变得混乱和难以维护,现代编程实践通常建议避免使用它。
  5. register:
    在早期的C语言标准中,register关键字用于建议编译器将变量存储在寄存器中,以便提高访问速度。然而,现代编译器已经能够智能地管理寄存器分配,所以使用register关键字通常不再有明显的性能提升,并且在C++17中已被弃用。
  6. volatile:
    volatile关键字用于告诉编译器不要对标记为volatile的变量进行优化,因为这些变量的值可能会在未知的时间被外部因素改变,比如硬件中断或多线程环境中的共享变量。这可以防止编译器对这些变量的读取和写入操作进行优化,以确保程序的行为是可预测的。
  • 数据类型相关的关键字

    1. bool、true、false:对于bool类型数据的相关处理,值为true和false
    2. char、wchar_t:char是单字符数据,wchar_t多字符数据
    3. int、short、float、double、long:整数和实数的数据类型
    4. signed、unsigned:定义有符号和无符号数据的说明符
    5. auto:在c语言中,是存储类型,但是在C++中,是类型自动推导,注意事项有两个:
      1. 连续定义多个变量时,初始值必须是相同数据类型,否则报错
      2. auto p=&m; 与auto* p = &m;规定是一样
        explicit:防止数据隐式转换
        typedef:类型重定义
        sizeof:求数据类型的字节运算
  • 语句相关的关键字

    1. switch、case、default:实现多分支选择结构
    2. do、while、for:循环相关的关键字
    3. break、continue、goto:跳转语句
    4. if、else:选择结构
    5. inline:内联函数
    6. return:函数返回值
  • 存储类型相关的关键字
    static、const、volatile、register、extern、auto

  • 构造数据类型相关

    1. struct、union:结构体和共用体
    2. enum:枚举
    3. class:类
  • 访问权限:public、protected、private

  • 异常处理:throw、try、catch

  • 类中相关使用关键字

    1. this:指代自己的指针
    2. friend:友元
    3. virtual:虚
    4. delete、default:对类的特殊成员函数的相关使用
      例如:Test(const Test &) = default; ~Test() = delete;
    5. mutable:取消常属性
    6. using:引入数据,有三种使用方式
      1. 使用命名空间的关键字
      2. 相当于类型重定义
      3. 修改子类中从父类继承下来成员的权限
    7. operator:运算符重载关键字
  • 类型转换相关的关键字
    static_cast、dynamic_cast、const_cast、reinterpret_cast

  • 模板相关的关键字:template、typename

  • 命名空间相关:using、namespace

  • export:导入相关模板类使用

  • 内存分配和回收:new、delete

一百零二、C++标准模板库(STL)

  • C++中的标准模板库(Standard Template Library),STL是标准库之一。
  • 标准模板库中使用了大量的函数模板和类模板,用来对数据结构和算法的处理。
  • STL的组成:容器、算法、迭代器

102.1 vector容器

  • vector也是数组,称为单端数组,和普通数组有区别,普通数组是静态空间,而vector容器空间是动态拓展的。
  • 动态拓展:不是在原来的空间续接新的空间,而是重新申请空间,把原来的数据拷贝到新的空间中去。

102.2 vector的构造函数

函数原型:vector< T > v; //无参构造vector(const vector &v)//拷贝构造函数vector(v.begin(), v.end()) ;  //把区间[ v.begin(), v.end() )的数据拷贝给本对象vector(n, elem);  //把n个elem拷贝给本对象

示例 :

#include <iostream>
#include <vector>  //包含头文件vectorusing namespace std;void printVector(vector<int> &v) //算法
{vector<int>::iterator iter; //迭代器for(iter = v.begin(); iter != v.end(); iter++){cout << *iter << " ";}cout << endl;
}
int main()
{vector<int> v; //vector容器v.push_back(10); //尾插v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);printVector(v);vector<int> v1 = v;  //v1(v)printVector(v1);vector<int> v2(v1.begin(), v1.end());printVector(v2);vector<int> v3(3,99);printVector(v3);return 0;
}

102.3 vector的赋值函数

函数原型:vector &operator=(vector &v); //拷贝赋值函数assgin(v.begin(), v.end()); //把区间[ v.begin(), v.end() )的数据赋值给本对象assgin(n, elem);  //把n个elem赋值给本对象

示例 :

#include <iostream>
#include <vector>  //包含头文件vector
using namespace std;void printVector(vector<int> &v) //算法
{vector<int>::iterator iter; //迭代器for(iter = v.begin(); iter != v.end(); iter++){cout << *iter << " ";}cout << endl;
}
int main()
{vector<int> v; //vector容器v.push_back(10); //尾插v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);printVector(v);vector<int> v1 = v;  //v1(v)printVector(v1);vector<int> v2(v1.begin(), v1.end());printVector(v2);vector<int> v3(3,99);printVector(v3);v1 = v3;printVector(v1);v1.assign(v2.begin(), v2.end());printVector(v1);v1.assign(6,8);printVector(v1);return 0;
}

102.4 vector的容量大小

empty();	//判断是否为空
size();		//容器的大小,元素的个数
capacity();	//容量的大小
resize();	//重新设置大小 

在这里插入图片描述

102.5 vector的插入和删除

函数原型:push_back();					//尾插pop_back();						//尾删insert(iterator pos, elem);		//在迭代器所指向的位置,插入数据insert(iterator pos, n, elem);	//在迭代器所指向的位置,插入n个数据erase(v.begin(), v.end());		//把这个区间的数据删除clear();						//清空

示例 :

#include <iostream>
#include <vector>  //包含头文件vector
using namespace std;void printVector(vector<int> &v) //算法
{vector<int>::iterator iter; //迭代器for(iter = v.begin(); iter != v.end(); iter++){    cout << *iter << " ";    }cout << endl;
}
int main()
{vector<int> v; //vector容器v.push_back(10); //尾插v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);printVector(v);vector<int> v1 = v;  //v1(v)printVector(v1);vector<int> v2(v1.begin(), v1.end());printVector(v2);vector<int> v3(3,99);printVector(v3);v1 = v3;printVector(v1);v1.assign(v2.begin(), v2.end());printVector(v1);v1.assign(6,8);printVector(v1);if(!v1.empty()){cout << v1.size() << endl;cout << v1.capacity() << endl;}v1.resize(3);printVector(v1);v1.push_back(99);printVector(v1);v1.pop_back(); //尾删printVector(v1);printVector(v2);v2.insert(v2.begin()+1,99);printVector(v2);v2.insert(v2.begin()+3,3,99);printVector(v2);v2.erase(v2.begin()+2);printVector(v2);cout << "=====================" << endl;//v2.erase(v2.begin(),v2.end());//printVector(v2);v2.clear();printVector(v2);return 0;
}

102.6 vector的元素提取

函数原型at(int idx);			//下标为 idx 的元素operator[](int idx);front();				//第一个元素back();					//最后一个元素

在这里插入图片描述

一百零三、list

103.1 概念

  • 功能:将数据进行链式存储

  • 链表(list) : 是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。

  • 链表的组成 :链表由一系列节点组成

  • 节点的组成 :一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域

  • STL中的链表是一个双向链循环链表

  • list的优点:

    • 采用动态存储分配,不会造成内存浪费和溢出
    • 链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素-
  • list缺点:

    • 链表灵活,但是空间(指针域)和 时间(遍历)额外消耗比较大

103.2 list构造函数

函数原型:list lst; //无参构造函数list(beg, end); //构造函数将[begin,end)区间中对的元素拷贝给本身list(n, elem); //构造函数将n个elem拷贝给本身list(const list& l); //拷贝构造函数

103.3 list赋值和交换

函数原型:assign(beg, end); //将[beg,end)区间中的数据拷贝赋值给本身assign(n, elem); //将n个elem拷贝赋值给本身list& operator=(const list &lst); //重载赋值符swap(lst); //将lst与本身的元素互换

103.4 list大小操作

函数原型:size();				//返回容器中元素的个数empty();			//判断容器是否为空resize(num);		//重新指定容器的长度为um,若容器变长,则以默认值填充新空间//如果容器变短,则末尾超出容器长度的元素则被删除resize(num, elem);	//重新指定容器的长度为num,若容器变长,则以elem值填充新空间//如果容器变短,则末尾超出容器的元素被删除。

103.5 list插入和删除

函数原型:
push_back();						//尾部插入元素
pop_back();							//删除最后一个元素
push_front(elem);					//在容器的开头插入一个元素
pop_front();						//在容器的开头删除一个元素
insert(const_iterator pos, ele);	//迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count, ele);	//迭代器指向位置pos 插入count个元素ele
insert(pos,beg, end);				//在pos位置插入[beg,end)区间的数据,无返回值。
erase(const_iterator pos);			//删除迭代器指向的元素
erase(const_iterator start, const_iterator end);	//删除迭代器从start到end之间的元素
clear();							//删除容器中所有的元素
remove(elem);						//删除容器中所有与elem值匹配的元素。

103.6 list 数据存取

函数原型:
front(); //返回第一个元素
back(); //返回最后一个元素

一百零四、C++文件操作

  • 文件相关的头文件 #include
  • 文件相关的三大类
    • 读文件 ifstream
    • 写文件 ofstream
    • 读写文件 fstream

104.1 写入数据

  1. 包含头文件
    #include
  2. 创建流对象
    ofstream ofs;
  3. 打开文件
    ofs.open(“文件名路径” , 打开方式);
    打开方式 :ios::out
  • 文件的打开方式 :
    在这里插入图片描述
  1. 写入数据
    ofs << 数据
  2. 关闭文件
    ofs.close();

104.2 读取数据

  1. 包含头文件
    #include

  2. 创建流对象
    ifstream ifs;

  3. 打开文件
    ifs.open(“文件名路径” , 打开方式);
    ios::in

  4. 读取数据
    ifs >> 存放的变量

  5. 关闭文件
    ifs.close();

104.3 示例

#include <iostream>
//1.包含头文件
#include <fstream>
using namespace std;int main()
{//写入数据//2.创建流对象ofstream ofs;//3.打开文件ofs.open("C:/Users/admin/Desktop/stu.txt",ios::out);//4.写入数据ofs << "姓名:张三  ";ofs << "年纪:18"  << endl;//5.关闭文件流ofs.close();//2.创建流对象ifstream ifs;//3.打开文件ifs.open("C:/Users/admin/Desktop/stu.txt",ios::in);//4.读取数据char buff[1024];while (ifs >> buff){cout << buff << endl;}//5.关闭文件流ifs.close();return 0;
}

相关文章:

嵌入式养成计划-41----C++ auto--lambda表达式--C++中的数据类型转换--C++标准模板库(STL)--list--C++文件操作

九十九、auto 99.1 概念 C11引入了自动类型推导&#xff0c;和Python不一样&#xff0c;C中的自动类型推导&#xff0c;需要auto关键字来引导比如 &#xff1a;auto a 1.2; 会被编译器自动识别为 a 为 double 类型 99.2 作用 auto修饰变量&#xff0c;可以自动推导变量的数…...

全局事件总线

全局事件总线 功能&#xff1a;可以解决所有组件之间通信传数据的问题原理&#xff1a;通过一个共享对象&#xff0c;将所有组件全部绑定到对象上&#xff0c;即可通过这个对象实现组件与组件之间的传递数据&#xff0c;而这个共享对象叫做全局事件总线。 如何分清楚谁是发送方…...

通讯网关软件026——利用CommGate X2ORACLE-U实现OPC UA数据转入ORACLE

本文介绍利用CommGate X2ORACLE-U实将OPC UA数据源中的数据转入到ORACLE数据库。CommGate X2ORACLE-U是宁波科安网信开发的网关软件&#xff0c;软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示&#xff0c;将OPC UA数据源的数据写入到ORACLE数据…...

RAII与智能指针

RAII与智能指针 1.RAII1.1RAII理解1.2RAII的原理1.2.1简单的例子说明局部对象的自动销毁的特性 1.2.2 RAII 过程 2.智能指针2.1 auto_ptr2.1.1auto_ptr的使用构造函数与析构函数拷贝构造函数与赋值提领操作auto ptr其它函数 2.1.2autoptr使用的注意事项 2.2 unique_ptr2.2.1uni…...

易云维智慧工业云平台助力广西国企培育数字产业化平台,打造数字化产业生态

2022年6月6日&#xff0c;广西壮族自治区人民政府国有资产监督管理委员会出台了《国有企业数字化转型工作实施意见》&#xff0c;明确了总体要求、主要目标、重点推进国有企业数字化转型的任务和保障措施。 《意见》预计&#xff0c;到2025年底&#xff0c;广西基本实现自治区级…...

【密码学】第三章、分组密码

DES、IDEA、AES、SM4 1、分组密码定义&#xff08;按照五个组成部分答&#xff09; 密钥空间&#xff1a;属于对称加密算法kekd明密文空间&#xff1a;将明文划分为m比特的组&#xff0c;每一块依次进行加密加解密算法&#xff1a;由key决定一个明文到密文的可逆映射 2、发展…...

宁夏企业过等保选哪家测评机构好?选哪家堡垒机好?

最近不少宁夏小伙伴在问&#xff0c;宁夏企业过等保选哪家测评机构好&#xff1f;选哪家堡垒机好&#xff1f;今天我们小编就给大家来简单说说哈&#xff01; 宁夏企业过等保选哪家测评机构好&#xff1f; 目前宁夏正规具有资质的等保测评机构只有3家&#xff0c;分别为中电信…...

Vue绑定style和class 对象写法

适用于&#xff1a;要绑定多个样式&#xff0c;个数确定&#xff0c;名字也确定&#xff0c;但不确定用不用。 绑定 class 样式【对象写法】&#xff1a; .box{width: 100px;height: 100px; } .aqua{background-color: aqua; } .border{border: 20px solid red; } .radius{bor…...

使用vue-sign插件

Vue-sign是一个基于Vue.js和Canvas的签名组件&#xff0c;可以轻松地在Vue应用程序中实现签名板或手写签名功能。使用它可以使用户在前端网页上直接进行手写签名&#xff0c;实现更好的用户交互和业务需求。 使用Vue-sign可以提供以下好处&#xff1a; 通过Vue.js框架进行开发…...

python究竟可以用来做些什么

这里就不撰述python的一些像什么“高级语言”之类的比较常规的介绍了&#xff0c;还是老样子&#xff0c;说说一些比较常用的东西吧。 python是什么 python&#xff0c;一款可编程的开源软件&#xff0c;很多第三方库、框架也是开源的&#xff0c;比如强大的anaconda、sklear…...

Segment Anything(论文解析)

Segment Anything 摘要1.介绍2 SAM任务SAM模型 摘要 我们介绍了“Segment Anything” (SA) 项目&#xff1a;这是一个新的任务、模型和数据集对于图像分割。使用我们高效的模型进行数据收集&#xff0c;我们构建了迄今为止最大的分割数据集&#xff08;远远超过其他数据集&…...

@ConditionalOnProperty 用法

文章目录 前言一、使用场景二、使用步骤1.错误示例2.ConditionalOnProperty的解决方案 总结 前言 ConditionalOnProperty 是Spring Boot中的条件注解&#xff0c;它的核心功能是通过属性名以及属性值来实现的&#xff0c;常被用于判断某个属性是否存在&#xff0c;然后决定某个…...

如何选择超声波清洗机、超声波清洗机排行榜

眼镜的日常清洗生活中很多人都会把它给忘记&#xff01;长时间下来眼镜支架就会变成黄色的&#xff0c;非常的难洗掉&#xff0c;从而又浪费了一个眼镜。一副好的眼镜也不便宜的&#xff0c;把换眼镜的钱省下来入一款超声波清洗机&#xff0c;可以大大的减少金钱的支持&#xf…...

大家这么喜欢这件羽绒服的吗?眼光太好啦

简单干净散发着朝气&#xff0c;温暖的气息由内而外 90白鸭绒&#xff0c;高密度充绒量和蓬松度 三防工艺&#xff0c;立领连帽设计 下摆抽绳&#xff0c;帽子上的魔术贴设计 无一不将保暖落实在实处...

pytorch 入门(二)

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】教案二&#x1f356; 原作者&#xff1a;K同学啊 目录 一、神经网络的组成部分1. 神经元2. 神经网络…...

2023年国赛-大数据应用开发(师生同赛)_赛项规程样题解析

2023年国赛-大数据应用开发(师生同赛)_赛项规程样题解析-任务B&#xff1a;离线数据处理_子任务一&#xff1a;数据抽取2023年国赛-大数据应用开发(师生同赛)_赛项规程样题解析-任务B&#xff1a;离线数据处理_子任务二&#xff1a;数据清洗2023年国赛-大数据应用开发(师生同赛…...

MNE系列教程1——MNE的安装与基本绘图

一、MNE包简介 MNE-Python是一个强大的Python库,专门用于脑电图(EEG)和磁共振成像(MRI)数据的分析和可视化。它提供了广泛的工具,使研究人员能够高效地处理神经科学数据。 MNE-Python支持许多数据格式,包括标准的EEG和MEG文件格式,以及不同类型的MRI数据。它可以用于…...

黑马JVM总结(三十六)

&#xff08;1&#xff09;CAS-概述 cas是配合volatile使用的技术 &#xff0c;对共享变量的安全性要使用synachonized加锁&#xff0c;但是CAS不加锁&#xff0c;它是使用where&#xff08;true&#xff09;的死循环&#xff0c;里面compareAndSwap尝试把结果赋值给共享变量&…...

【React】01-React的入门

文章目录 1.1 React简介1.1.1 官网1.1.2 介绍描述1.1.3 React的特点1.1.3 React高效的原因 1.2.React的基本使用1.2.2.相关js库1.2.3.创建虚拟DOM的两种方式1.2.4.虚拟DOM与真实DOM 1.3.React JSX1.3.1.效果jsx语法规则&#xff1a;1.3.2.JSX1.3.3.渲染虚拟DOM(元素)1.3.4.JSX练…...

【C语言进阶】自定义类型:结构体,枚举,联合

自定义类型&#xff1a;结构体&#xff0c;枚举&#xff0c;联合 1.结构体1.1结构体类的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐1.8结构体传参 2.段位2.1什么是段位2.2段位的内存分配2.3位段的跨平台问…...

Sklearn 聚类算法的性能评估

聚类算法的性能评估是什么? 聚类是无监督学习的一种常用技术,用于将相似的数据点分组在一起。然而在实施聚类算法后,一个关键的问题便是如何评估其性能或质量。由于聚类是无监督的,因此评估其性能相对更为复杂。本文将探讨多种用于评估聚类性能的指标,包括肘部法则、轮廓…...

9月最新外贸进出口数据出来了,外贸整体向好

10月13日&#xff0c;海关总署发布数据显示&#xff0c;今年前三季度中国货物贸易出口2.52万亿美元&#xff0c;下降5.7%。 9月当月&#xff0c;中国出口2991.3亿美元&#xff0c;同比下降6.2%。贸易顺差777.1亿美元。 这个数据还是在改善的。特别是&#xff0c;我们看到全球…...

SSL证书有效期越来越短是什么原因?

随着互联网的普及和数据安全意识的提高&#xff0c;SSL证书的使用变得日益普遍。SSL证书是一种用于加密数据传输并验证网站身份的安全协议。它们通过加密在用户浏览器和网站服务器之间传输的数据&#xff0c;从而确保数据的隐私和完整性。此外&#xff0c;SSL证书还通过数字签名…...

【前段基础入门之】=>CSS3新特性 3D 变换

导语 在上一章节中&#xff0c;我们分享了2D 变换的效果&#xff0c;也分享了一些案例&#xff0c;同时&#xff0c;既然有2D 变换&#xff0c;那么也就肯定有 3D 变换 那么本章节&#xff0c;就为大家带来有关3D 变换的分享. 文章目录 开启3D空间设置景深透视点位置3D 位移3D …...

form表单的三种封装方法(Vue+ElementUI)

form表单的三种封装方法&#xff08;VueElementUI&#xff09; 1.首先是最普通&#xff0c;也是大家最先想到的方法&#xff0c;直接封装&#xff1a;2.实现表单动态渲染、可视化配置的方法&#xff0c;动态表单又可以分为两种方法&#xff1a;(注意&#xff1a;注意 v-model 的…...

云原生周刊:CNCF 宣布 Cilium 毕业 | 2023.10.16

开源项目推荐 Reloader Reloader 是一个 Kubernetes 控制器&#xff0c;用于监控 ConfigMap 和 Secrets 中的变化&#xff0c;并对 Pod 及其相关部署、StatefulSet、DaemonSet 和 DeploymentConfig 进行滚动升级&#xff01; Spegel Spegel 在瑞典语中意为镜像&#xff0c;…...

岩土工程监测利器:多通道振弦数据记录仪应用隧道监测

岩土工程监测利器&#xff1a;多通道振弦数据记录仪应用隧道监测 岩土工程监测在现代工程建设中的作用越来越重要。为了确保工程质量和工程安全&#xff0c;需要对工程过程中的各种参数进行实时监测和记录。而多通道振弦数据记录仪则是一种重要的监测工具&#xff0c;特别适用…...

hive排序

目录 order by (全局排序asc ,desc) sort by(reduce 内排序) Distribute by(分区排序) Cluster By&#xff08;当 distribute by 和 sorts by 字段相同时 &#xff0c;可以使用 &#xff09; order by (全局排序asc ,desc) INSERT OVERWRITE LOCAL DIRECTORY /home/test2 …...

网络安全入门教程(非常详细)从零基础入门到精通

网络安全是一个庞大而不断发展的领域&#xff0c;它包含多个专业领域&#xff0c;如网络防御、网络攻击、数据加密等。介绍网络安全的基本概念、技术和工具&#xff0c;逐步深入&#xff0c;帮助您成为一名合格的网络安全从业人员。 一、网络安全基础知识 1.计算机基础知识 …...

自动驾驶中的数据安全和隐私

自动驾驶技术的发展已经改变了我们的出行方式&#xff0c;但伴随着这项技术的普及&#xff0c;数据安全和隐私问题也变得愈发重要。本文将探讨自动驾驶中的数据收集、数据隐私和安全挑战&#xff0c;以及如何保护自动驾驶系统的数据。 自动驾驶中的数据收集 在自动驾驶技术中…...