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

10 C++11

10 C++11

  • 1、类型推导
    • 1.1 auto关键字
    • 1.2 auto类型推断本质
  • 2、类型计算
    • 2.1 类型计算分类
    • 2.2 类型计算的四种规则
    • 2.3 返回值类型计算
  • 3、列表初始化
  • 4、Lambda表达式
    • 4.1 前置知识
    • 4.2 Lambda表达式
    • 4.3 捕获表
  • 5、右值引用
    • 5.1 概念
    • 5.2 左值引用和右值引用
  • 6、移动语义

1、类型推导

1.1 auto关键字

  • C++98中,auto表示栈变量,通常省略不写
void foo(void){int i;auto int j;//表示在栈里分配的
}
  • C++11中,给auto赋予新的语义,表示自动类型推导
    • 既根据对变量进行初始化时所使用的数据的类型,由编译器自动推导出所定义变量的实际类型
auto i=0; -> int j=10;
auto j=i; -> int j=i;

1.2 auto类型推断本质

·按照定义独立对象并根据初始化数据的类型进行推导。
注意:无法自动推断const,只能自己在auto的上下文显示指明。但是有两种情况是除外的:
1:如果给出的初始化数据类型为常量指针,则可以自动推导出const
2:auto与引用的联合联用
- 按照定义独立对象并根据初始化数据的类型进行推导,所以不可能推导出引用
- 除非auto的上下文指明按照引用推导若指明按引用推导并且目标带有常属性,则可以自动推导const

/*类型推导  
linux 默认是c98标准的,如果需要编译的话需要添加 -std=c++11 
类型推导绝对不是类型照抄
*/
int main(){int a = 10;auto c = a;cout << "c的类型" << typeid(c).name() << endl;// typeid无法获取到对象的常属性c++;// 允许更改,说明不被const修饰cout <<"&c:"<< &c <<"&a:"<< &a << endl;const int b = 20;auto d = b;cout << "d的类型" << typeid(d).name() << endl;cout << "&d:" << &d<< "&b:" << &b << endl;d++;// 允许更改,说明不带constconst auto e = b;// 自己在auto上添加constcout << "e的类型" << typeid(e).name() << endl;cout << "&e:" << &e << "&d:" << &d << endl;// e++;// 不允许更改,说明带constauto f = &b;// 如果初始化数据的类型为常指针,则可以自动推导出constcout << "f的类型为:" << typeid(f).name() << endl;// *f = 888; // *f不允许更改f = NULL; // f是可以更改,说明推导出来的类型是 const int *return 0;
}
/*类型推导和引用的联合使用*/
int main(){int a = 10;const int b = 10;auto & d = a;cout << "d的类型" << typeid(d).name() << endl; cout << "&d:" << &d << "&a:" << &a << endl; // 地址相同,说明是别名d++;auto&e = b; // 这里指明了e是引用推导,并且b带有常属性,则可以自动推导出constcout << "e的类型" << typeid(e).name() << endl;cout << "&e:" << &e << "&b:" << &b << endl;// // 地址相同,说明是别名//e++; // 出错,说明不能更改 那么e的类型为const int &return 0;
}
  • auto关键字的使用限制
    • 1:函数形参类型无法推导(C++14标准支持)。
    • 2:类的成员变量无法推导。
void foo(auto v){}

2、类型计算

2.1 类型计算分类

c语言:sizeof-计算类型的大小
C++语言:typeid-可以获取类型的信息字符串
C++11:decltype-获取参数表达式的类型
注意事项:类型推导和类型计算都是由编译器确定,并不是运行期确定

/*类型计算*/
int main(){const int a = 10;auto  b = a; // 类型推导cout << "b的类型" << typeid(b).name() << endl; cout << "&b:" << &b << "&a:" << &a << endl; b++;// 允许更改,所以推导出来的类型是intdecltype(a)c = 100;// 类型计算 初始值可以设置和a不一样cout << "c的类型" << typeid(c).name() << endl;cout << "&c:" << &c << "&a:" << &a << endl;// // 地址不相同相同// c++; // 出错,说明不能更改 那么c的类型为const int return 0;
}
  • 类型推导和类型计算的比较
    1:类型计算比类型推导在类型的确定上更加精准
    2:类型计算比类型推导在初值的确定上更加灵活

2.2 类型计算的四种规则

  • 1:如果给decltype传递的为标识符表达式,decltype取该标识符的类型作为最终计算出的类型
int main(){int a = 10;// 如果给decltype传递的为标识符表达式,decltype取该标识符的类型作为最终计算出的类型decltype(a)b = a;// 类型计算cout << "b的类型" << typeid(b).name() << endl;cout << "&b:" << &b << "&a:" << &a << endl;// // 地址不相同b++; // 能更改说明b的类型为 int return 0;
}
  • 2:如果给decltype传递的为函数表达式,decltype取该函数的返回值类型作为最终计算出的类型
float foo(){cout << "函数被调用" << endl;return 3.14;
}
int main(){int a = 10;// 如果给decltype传递的为函数表达式,decltype取该函数的返回值类型作为最终计算出的类型decltype(foo())b = a;// 并不会去实际调用foo()函数,类型计算是编译器确定的,不是运行时cout << "b的类型" << typeid(b).name() << endl;cout << "&b:" << &b << "&a:" << &a << endl;// // 地址不相同b++; // 能更改说明b的类型为 float return 0;
}
  • 3:如果给decltype传递的为其他表达式,并且表达式的结果为左值,则取该左值引用的类型作为最终计算出的类型
int main(){int a = 10;// 如果给decltype传递的为其他表达式,并且表达式的结果为左值,则取该左值引用的类型作为最终计算出的类型decltype(++a)b = a;cout << "b的类型" << typeid(b).name() << endl;cout << "&b:" << &b << "&a:" << &a << endl;// // 地址相同b++; //允许更改 说明b的类型为int &return 0;
}
  • 4:如果给decltype传递的为其他表达式,并且表达式的结果为右值,则取该右值本身的类型作为最终计算出的类型
int main(){int a = 10;// 如果给decltype传递的为其他表达式,并且表达式的结果为右值,则取该右值本身的类型作为最终计算出的类型decltype(a++)b = a;cout << "b的类型" << typeid(b).name() << endl;cout << "&b:" << &b << "&a:" << &a << endl;// // 地址不相同b++; //允许更改 说明b的类型为int return 0;
}

2.3 返回值类型计算

  • 返回值类型后置
auto foo(int x, double y)->decltype(x+y){// 返回值类型后置,通过decltype计算得出return  x + y;
}
int main(){auto f = foo(1, 3.1);// 类型推导cout << typeid(f).name() << endl; // double类型return 0;
}

3、列表初始化

基本类型,类类型,结构/联合/枚举类型等等的单个对象或对象数组,都可以采用形式完全统一的列表初始化语法
进行对象的初始化

  • 书写形式:类型 对象 {初值表};
    -int a{123);
    -new double {1.23);
    -string c{“123”};
    -struct Student {d,“张飞”,20,{1997,10,10}};
    -float e[]{1.1,2.2,3.3};
struct BD{int m_year;int m_month;int m_day;
};
struct myStudent{string m_name;int m_age;BD m_body;
};
class Human{
public:Human(int age = 0, const char* name = "无名") :m_age(age), m_name(name){}int m_age;string m_name;
};
int main(){int a = { 123 }; // int a=123cout << "a=" << a << endl;double* pa = new double{ 3.14 };// double *pa = new double(3.14);double *pb{ new double{ 3.14 } };cout << "*pa=" << *pa << " *pb=" << *pb << endl;int b[]{1, 2, 3};//int b[] = { 1, 2, 3 };for (int i = 0; i < 3; i++){ cout << b[i] << ' '; }int *parr{ new int[3]{4, 5, 6} };for (int i = 0; i < 3; i++){ cout << parr[i] << ' '; }delete[]parr;myStudent s{ "zs", 22, { 1997, 5, 7 } }; // myStudent s = { "zs", 22, { 1997, 5, 7 } };cout << s.m_name << s.m_age << s.m_body.m_year << s.m_body.m_month << s.m_body.m_day << endl;Human h{ 20, "赵云" };//Human h (20, "赵云" )cout << h.m_age << h.m_name << endl;return 0;
}
  • 小括号操作符函数
class AA{
public:int operator()(int x, int y){return x + y;}
};
int main(){AA a;cout << a(100, 200) << endl;;// a.operator()(100,200)
}

4、Lambda表达式

4.1 前置知识

在C++中函数的作用域中可以有类型,也可以有表达式

  • 针对于函数内部定义了类型,编译器先编译函数内部的类型,然后在编译函数体本身的代码
int a;
void foo(int b){int c;class A{public:void bar(int d){a = 0;// 能访问// b = 0; // 不能访问// c = 0; // 不能访问d = 0;// 能访问}};
}

4.2 Lambda表达式

  • 语法规则:
[捕获表](参数表)选项->返回类型
{函数体
}
  • 使用
int main(void){int a = 10, b = 20;auto c =[](int x, int y)->int{return x > y ? x : y; };// 编译器 (1) 生成一个类  (2) 类内定义一个小括号操作符函数 (3) 返回这个类的匿名对象cout<<c(a,b)<<endl;return 0;
}
  • 本质
    lambda表达式本质其实是一个类并且最终返回值为这个类的对象,因此对lambda表达式的调用就是该对象的函数操作符的调用
    在这里插入图片描述

解释:编译器在编译到Lambda表达式时,编译器会生成一个类Z4XXX的类,类中定义一个小括号操作函数,函数体里面填充Lambda的函数体内容,函数的返回值类型为Lambda中定义的返回类型。
其中

  • 可以没有返回值类型,将根据return推断
int main(void){int a = 10, b = 20;auto c = [](int x, int y){return x + y; };// 当没有返回值类型时,中间的箭头可以省略cout << c(a, b) << endl;return 0;
}
  • 如果连return也没有,则返回值为void
int main(void){int a = 10, b = 20;[](int x, int y){cout<< x + y<<endl; }(a,b);// 如果连return也没有,则返回值为voidreturn 0;
}
  • 参数为void可以省略不写的
int main(void){int a = 10, b = 20;[]{cout << "12345" << endl; }();// 如果没有形参,返回值类型也为void那么小括号和中间的剪头都可以省略return 0;
}

4.3 捕获表

  • []-不捕获任何外部变量
  • [variable]-捕获外部变量的值
  • [&variable]-按引用捕获,外部变量的别名
  • [this]-捕获this指针,访问外部对象的成员
int a = 10;
class Y{
public:Y(int m_e) :e(m_e){};void foo(int c = 30){cout << "---" << endl;// []-不捕获外部变量的值[](int d = 40){cout << "a=" << a << endl;cout << "b=" << b << endl;// cout << "c=" << c << endl; // 错误cout << "d=" << d << endl;// cout << "e=" << e << endl; // 错误}();cout << "--------------[c]--------" << endl;// [variable]-捕获外部变量只读[c](int d = 0){cout << "c=" << c << endl; }();cout << "--------[&c]---------" << endl;// [&variable]-按引用捕获,外部变量的别名[&c]{c++; cout << "c=" << c << endl; }();cout << c << endl;// [this]-捕获this指针,访问外部对象的成员cout << "--------[this]---------" << endl;[this]{cout << "e=" << e << endl; }();}
private:static int b;int e;
};
int Y::b = 10;int main(){Y y(4);y.foo();return 0;
}
  • [=]-按值捕获所有的外部变量,也包括this
  • [&]-按引用捕获所有的外部变量,也包括his
  • [=,&variable]-按值捕获所有的外部变量包括this,但是指定的外部变量按引用捕获。
  • [&,=variable]-按引用捕获所有的外部变量,也包括this,但是指定的外部变量按值捕获。

5、右值引用

5.1 概念

左值引用是别名,右值引用就是真名
左值:可以“取”地址的值就是左值,左值通常具名
右值:不可“取”地址的值就是右值,右值通常匿名
左值细分为非常左值和常左值
- 非常左值:有名字、可以取地址、没有常属性
- 常左值:有名字、可以取地址、有常属性
右值细分为纯右值和将亡值
- 纯右值:有一块无名内存,里面存放了基本类型的数据
- 将亡值:有一块无名内存,里面存放了类类型的数据

5.2 左值引用和右值引用

  • 左值引用只能引用左值,不能引用右值
  • 右值引用只能引用右值,不能引用左值
  • 常左值引用,既能引用左值,也能引用右值
  • 常右值引用,完全可以被常左值引用替代
/*左值引用和右值引用的差别*/
int main(){// 左值引用只能引用左值,不能引用右值int a=1, c=2;int & ra = a;// int & rb = a + c; // 错误 左值引用不能引用右值int &&rb = a + c;// 使用右值引用// int &&rc = a;// 错误 右值引用只能引用右值,不能引用左值cout << rb << endl;const int & _l = a; // 引用左值const int & _r = a + c; // 引用右值// 常左值引用会丧失修改目标的权限// _l = 9;// 错误// 右值引用不会丧失修改目标的权限rb = 90;cout << rb << endl;
}

6、移动语义

  • 方法:
    资源的转移 代替 资源的重建
  • 作用:
    保证功能正确的情况下,做到性能提升
//深拷贝构造函数 资源的重建String(const String & that) :m_psz(new char[strlen(that.m_psz) + 1]){cout << "深拷贝构造 资源的重建" << endl;strcpy(m_psz, that.m_psz); // 没有复制地址,复制了数据(深拷贝)
}
// 深拷贝构造函数 资源的转移 
String(String && that):m_psz(that.m_psz){that.m_psz = NULL;cout << "资源转移" << endl;
}
// 深拷贝赋值函数 资源的重建String& operator=(/*String* this*/const String & that){cout<<"深拷贝赋值函数 资源的重建"<<endl;if (this == &that){}// 防止出现用户自己给自己赋值else{delete[] this->m_psz;// 编译器会先定义一个m_psz,并初始>化为空串,所以需要先释放内存this->m_psz = new char[strlen(that.m_psz) + 1];// 申请新资源strcpy(m_psz, that.m_psz); // 拷贝新内容}return *this;// 返回自引用
}// 拷贝赋值函数 资源的转移
String& operator=(String&& that){cout<<"拷贝赋值函数 资源的转移"<<endl;delete this->m_psz;this->m_psz=that.m_psz;that.m_psz=NULL;return *this;
}
//在linux下 命令行输入:g++ abc.cpp -std=c++11 -fno-elide-constructors
int main(){ String s1=String("hello"); // 深拷贝构造函数 资源的转移String s2=s1;// 拷贝构造函数 资源的重建s2=s1;// 拷贝赋值函数 资源的重建s2=String("hello");// 拷贝赋值函数 资源的转移
}

相关文章:

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…...

java的封装

为什么要封装&#xff1f;在java的面向对象的思想中&#xff0c;封装是指将类的实现细节包装&#xff0c;隐藏起来的方法。封装可以防止本类的代码和数据被外部定义的代码随机访问。 如何进行封装&#xff1f; 在定义一个类时&#xff0c;将类中的属性私有化&#xff0c;即使…...

为什么选择海外服务器?

如何选择跨境电商服务器&#xff1a;详细指南 选择合适的服务器是跨境电商企业成功的基础。服务器的性能和稳定性直接影响着网站的访问速度、用户体验和安全性&#xff0c;进而影响着企业的销量和利润。那么&#xff0c;跨境电商企业该如何选择服务器呢&#xff1f; 1. 确定目…...

k8s+springcloud+nacos部署配置

1 k8s 部署nacos-2.1.2配置k8s-nacos-statefulSet.yaml文件 apiVersion: v1 kind: Service metadata:name: nacos-headlessnamespace: rz-dtlabels:app: nacosannotations:service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" spec:# 3个端口打开&…...

梯度提升决策树(GBDT)

GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫 MART&#xff08;Multiple Additive Regression Tree&#xff09;&#xff0c;它通过构造一组弱的学习器&#xff08;树&am…...

数据结构之B树的原理与业务场景

B树是一种自平衡的树形数据结构&#xff0c;它能够保持数据有序&#xff0c;并且可以高效地进行查找、顺序访问、插入和删除操作。B树的设计是为了优化磁盘I/O操作&#xff0c;因为它可以减少磁盘访问次数&#xff0c;这在数据库和文件系统中非常有用。 1. B树的原理 节点的出…...

【Android面试八股文】你能说一说线程池管理线程的原理吗?

面试官(Interviewer): 欢迎参加面试,今天我们会讨论一些关于 Java 线程池管理的问题。你能给我解释一下 ThreadPoolExecutor 是如何管理线程的吗? 候选人(Candidate): 当然可以,ThreadPoolExecutor 是 Java 中用于创建和管理线程池的核心类。它通过一组核心参数来控制线…...

springer 在线投稿编译踩坑

springer投稿&#xff0c;在线编译踩坑总结 注意&#xff1a; 有的期刊需要双栏&#xff0c;而预定义的模板中可能为单栏&#xff0c;需要增加iicol选项。 例如&#xff1a; \documentclass[sn-mathphys-num]{sn-jnl}% —>\documentclass[sn-mathphys-num, iicol]{sn-jnl}…...

固态硬盘的指标

固态硬盘的指标主要包括以下几个方面&#xff1a; 接口类型&#xff1a;这是固态硬盘与外部设备连接的方式&#xff0c;常见的接口类型有SATA、PCIe和NVMe等。不同的接口类型决定了固态硬盘的传输速度和性能。例如&#xff0c;PCIe接口的固态硬盘通常比SATA接口的固态硬盘具有…...

mysql 分组后每个取最新的一条记录

在MySQL中&#xff0c;若要从一个分组中获取每组的最新一条记录&#xff08;通常基于时间戳或其他递增的列&#xff09;&#xff0c;可以使用子查询或者窗口函数&#xff08;如果MySQL版本支持&#xff09;。 以下是两种不同的实现方法&#xff1a; 方法1: 使用子查询和LIMIT…...

Java语法和基本结构介绍

Java语法和基本结构是Java编程的基础&#xff0c;它决定了Java代码的书写方式和程序的结构。以下是Java语法和基本结构的一些关键点&#xff1a; 1.标识符和关键字&#xff1a;Java中的标识符是用来标识变量、函数、类或其他用户自定义元素的名称。关键字是预留的标识符&#x…...

TDengine 3.3.0.0 引入图形化管理工具、复合主键等 13 项关键更新

在涛思数据研发团队的努力下&#xff0c;TDengine 3.3.0.0 版本终于和大家见面了。这一版本中&#xff0c;我们引入了多项革新功能和性能优化&#xff0c;力求在为用户提供极致体验的同时&#xff0c;不断推动技术的前沿。 此次更新不仅针对开源社区版本&#xff0c;进行了一系…...

C++基础之红黑树

二叉搜索树 二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种二叉树&#xff0c;具有以下性质&#xff1a; 左子树节点值小于根节点值&#xff1a;对于树中的每个节点 x&#xff0c;其左子树中所有节点的值都小于 x 的值。右子树节点值大于根节点值…...

ClickHouse数据库对比、适用场景与入门指南

本文全面对比了ClickHouse与其他数据库&#xff08;如StarRocks、HBase、MySQL、Hive、Elasticsearch等&#xff09;的性能、功能、适用场景&#xff0c;并提供了ClickHouse的教学入门指南&#xff0c;旨在帮助读者选择合适的数据库产品并快速掌握ClickHouse的使用。 文章目录 …...

举例说明 如何通过SparkUI和日志定位任务莫名失败?

有一个Task OOM&#xff1a; 通过概览信息&#xff0c;发现Stage 10的Task 36失败了4次导致Job失败。概览信息中显示最后一次失败的退出代码&#xff08;exit code&#xff09;是143&#xff0c;意味着发生了内存溢出&#xff08;OOM&#xff0c;即Out of Memory&#xff09;。…...

Vue前端通过Axios的post方式传输数据,后端为什么一直接收的值是null?

沃靠!这个细节太细了,搞了我两个多小时才找到这个bug。 一、 首先官方文档给我的post请求的例子是这样的: axios.post(/user, {firstName: Fred,lastName: Flintstone}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);})…...

外链建设如何进行?

理解dofollow和nofollow链接&#xff0c;所谓dofollow链接&#xff0c;就是可以传递权重到你的网站的链接&#xff0c;这种链接对你的网站排名非常有帮助&#xff0c;这种链接可以推动你的网站在搜索结果中的位置向上爬&#xff0c;但一个网站全是这种有用的链接&#xff0c;反…...

深入理解Java正则表达式及其应用

正则表达式是一种强大的文本匹配和处理工具&#xff0c;可以在字符串中查找、替换、提取符合特定模式的内容。Java作为一种广泛应用的编程语言&#xff0c;提供了丰富的正则表达式支持。本文将深入探讨Java正则表达式的基本概念、语法以及常见应用场景&#xff0c;帮助读者全面…...

Gstreamer学习3----灌数据给管线之appsrc

参考资料 Basic tutorial 8: Short-cutting the pipeline gstreamer向appsrc发送帧画面的代码_gst appsrc可变帧率-CSDN博客 在官网教程Basic tutorial 8: Short-cutting the pipeline 里面&#xff0c;讲了一个例子&#xff0c;push音频数据给管线&#xff0c;视频的例子更…...

【深度学习量化交易1】一个金融小白尝试量化交易的设想、畅享和遐想

关注我的朋友们可能知道&#xff0c;我经常在信号处理的领域出没&#xff0c;时不时会发一些信号处理、深度学习科普向的文章。 不过算法研究久了&#xff0c;总想做一些更有趣的事情。 比如用深度学习算法赚大钱。。毕竟有什么事情能比暴富更有意思呢。 一、神经网络与彩票…...

【0基础学爬虫】爬虫基础之自动化工具 DrissionPage 的使用

概述 前三期文章中已经介绍到了 Selenium 与 Playwright 、Pyppeteer 的使用方法&#xff0c;它们的功能都非常强大。而本期要讲的 DrissionPage 更为独特&#xff0c;强大&#xff0c;而且使用更为方便&#xff0c;目前检测少&#xff0c;强烈推荐&#xff01;&#xff01;&a…...

c++_0基础_讲解7 练习

这一讲我为大家准备了几道题目&#xff0c;大家试着独自做一下&#xff08;可能来自不同网站&#xff09; 整数大小比较 - 洛谷 题目描述 输入两个整数&#xff0c;比较它们的大小。若 x>yx>y &#xff0c;输出 > &#xff1b;若 xyxy &#xff0c;输出 &#xff…...

docker一些常用命令以及镜像构建完后部署到K8s上

docker一些常用命令以及镜像构建完后部署到K8s上 1.创建文件夹2.删除文件3.复制现有文件内容到新建文件4.打开某个文件5.查看文件列表6.解压文件&#xff08;tar格式&#xff09;7.解压镜像8.查看镜像9.删除镜像10.查看容器11.删除容器12.停止运行容器13.构建镜像14.启动容器15…...

在typora中利用正则表达式,批量处理图片

一&#xff0c;png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接&#xff0c;且忽略 alt 和 style 属性&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Typora 并加载你的文档。按下 Ctrl H&#xff08;在 Windows/Linux 上&#xff09;或 Cmd…...

构建LangChain应用程序的示例代码:33、如何在LangChain框架中使用HumanInputChatModel来模拟人工输入的聊天模型教程

除了HumanInputLLM&#xff0c;LangChain还提供了一个伪聊天模型类&#xff0c;可以用于测试、调试或教育目的。这允许您模拟对聊天模型的调用&#xff0c;并模拟如果人类接收到这些消息会如何响应。 在这篇笔记中&#xff0c;我们将介绍如何使用这个模型。 我们首先在代理中…...

虚拟机使用桥接模式网络配置

1、获取本机的网络详细信息 windowr 输入cmd 使用ipconfig -all 一样即可 在自己的虚拟机中设置网络 虚拟机中的ip ---------192.168.36.*&#xff0c;不要跟自己的本机ip冲突 网关-----------192.168.36.254 一样即可 dns -----------一样即可&#xff0c;我多写了几个&am…...

韩顺平0基础学java——第24天

p484-508 System类 常见方法 System.arrycopy&#xff08;src&#xff0c;0&#xff0c;dest&#xff0c;1,2&#xff09;&#xff1b; 表示从scr的第0个位置拷贝2个&#xff0c;放到目标数组索引为1的地方。 BigInteger和BigDecimal类 保存大整数和高精度浮点数 BigInte…...

leecode N皇后

深度优先遍历&#xff0c;然后回溯 思考得到的技巧&#xff1a; 1.先思考怎么用学过的数据结构解题 2.回溯不只需要知道最后一步&#xff0c;还需要知道之前所走的每一步 3. 棋盘的生成&#xff0c;.join([]),可以变列表为字符串 看题解得到的技巧&#xff1a; 1.妙啊&#xf…...

2024050802-重学 Java 设计模式《实战模板模式》

重学 Java 设计模式&#xff1a;实战模版模式「模拟爬虫各类电商商品&#xff0c;生成营销推广海报场景」 一、前言 黎明前的坚守&#xff0c;的住吗&#xff1f; 有人举过这样一个例子&#xff0c;先给你张北大的录取通知书&#xff0c;但要求你每天5点起床&#xff0c;12点…...

UNIAPP-ADB无线调试

ADB下载 SDK 平台工具版本说明 | Android Studio | Android Developers (google.cn) 环境变量配置 ADB版本查看 adb version 手机使用数据线连接到电脑 手机需要授权adb调试(开发人员选项里面) CMD输入命令 adb tcpip 5555 到了这一步你手机已经启动了adb服务了&…...

外包网靠谱吗/sem与seo

本文通过开发一个JSP 编辑器插件的示例&#xff0c;介绍了 Eclipse 中设置 JSP 断点的方法&#xff0c;以及如何远程调试 JSP。作为基础知识&#xff0c;本文的前两部分描述了 JAVA Debug 和 JSR-45 的基本原理。环境要求: 本文的代码是在 Eclipse3.0.0&#xff0c;JDK1.4.2 和…...

wordpress没有链接地址/seo专业培训机构

对视频流中的图像数据&#xff0c;提取其R、G、B分量值&#xff0c;生成彩色直方图&#xff0c;并设置直方图的透明度&#xff0c;将其显示在原图像上。 需要用到的关键方法如下&#xff1a; 1、将输入的直方图数据绘制在初始分辨率为256*64的图像上&#xff0c;图像大小可自行…...

微信公众号小说代理和网站结合怎么做/推广app赚佣金平台

一、选择题1. 正确的C语言标识符是_____。A&#xff0e;_buy_2 B&#xff0e;2_buy C&#xff0e;?_buy D&#xff0e;buy?2. 以下是C语言提供的合法关键字的是_____。A&#xff0e;Float B&#xff0e;signed C&#xff0e;integer D&#xff0e;Char3. 以下不能定义为用户标…...

wordpress换域名把家/seo推广是做什么的

CORS&#xff08;跨域资源共享&#xff0c;Cross-Origin Resource Sharing&#xff09;CORS其实出现时间不短了&#xff0c;它在维基百科上的定义是&#xff1a;跨域资源共享&#xff08;CORS &#xff09;是一种网络浏览器的技术规范&#xff0c;它为Web服务器定义了一种方式&…...

携程网站的会计工作怎么做/百度网站官网

iOS 14.3 Beta2距离苹果推送 iOS 14.3 首个测试版时隔 5 天&#xff0c;苹果今天又向参与测试的 iPhone 设备推送 iOS 14.3 Beta2 更新。这次的更新包比较小&#xff0c;只有 390MB 左右&#xff0c;更新后的版本号为 18C5054c&#xff0c;单纯地从版本号的后缀来看&#xff0c…...

抖音代运营成本预算/百度推广怎么优化关键词的质量

1.1 HashMap 先来看一下HashMap里面是怎么存放元素的。Map里面存放的每一个元素都是key-value这样的键值对&#xff0c;而且都是通过put方法进行添加的&#xff0c;而且相同的key在Map中只会有一个与之关联的value存在。put方法在Map中的定义如下。 V put(K key…...