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

C++11 列表初始化与类型声明

目录

0.前言

1.C++11介绍

2.统一的列表初始化

2.1{}初始化

2.2initializer_list

2.2.1initializer_list 的基本用法

2.2.2用于类的 initializer_list 构造函数

2.2.3与标准库容器的结合

2.2.4优势与注意事项

3.新声明

3.1auto

3.1.1基本用法

3.1.2优势

3.1.3注意事项

3.2decltype

3.2.1基本用法

3.2.2与 auto 的区别

3.2.3用于返回类型推导

3.3nullptr

3.3.1基本用法

3.3.2与 NULL 的区别

3.3.3优势

4.小结


(图源网络,侵删)

0.前言

在现代软件开发中,数据结构和编程语言的特性直接影响代码的效率和可维护性。尽管 C++98 提供了丰富的数据结构和功能,但在代码简洁性和类型安全性方面仍有不足。C++11 引入了许多新特性,如右值引用、lambda 表达式、智能指针和多线程库等,极大地增强了语言的现代化和功能性。本文将重点介绍 C++11 的列表初始化和类型声明新特性,通过实例展示它们的用法和优势,帮助开发者更好地理解和应用这些特性。

1.C++11介绍

C++11,也被称为 C++0x,是 C++ 标准的一次重要更新,于 2011 年正式发布。它的出现标志着 C++ 语言的一个重大转折点,旨在解决 C++98 中的各种局限性和问题,使 C++ 更加现代化和高效。C++11 的开发始于 2005 年,其目标是提升语言的性能和可用性,同时保持与现有代码的兼容性。标准委员会通过广泛的讨论和实验,引入了大量的新特性,包括右值引用(Rvalue References)、lambda 表达式、智能指针、多线程库、以及更为简洁和安全的初始化和类型声明方式。C++11 不仅极大地丰富了语言本身的功能,也为开发者提供了更为强大的工具,帮助他们编写更高效、更可靠的代码。

2.统一的列表初始化

C++11 引入了统一的列表初始化语法,使得对象的初始化方式更加一致和简洁。新的列表初始化方式通过使用花括号 {} 来统一不同类型对象的初始化过程,从而简化代码,减少错误。

2.1{}初始化

在 C++11 之前,初始化对象的方式因对象类型的不同而各异。对于基本类型、数组、结构体、类等,各自有不同的初始化语法。这种多样化的初始化方式不仅让代码显得杂乱无章,还容易引发各种隐式转换错误和未定义行为。C++11 的 {} 初始化通过提供一种统一的语法,解决了这些问题。

基本类型的初始化

在 C++11 中,花括号 {} 可以用于初始化基本类型:

int a{10};    // 直接初始化
int b = {20}; // 复制初始化
int c{};      // 值初始化,c 被初始化为 0

这种初始化方式的一个显著优点是,它能够防止窄化转换(narrowing conversion):

int x{3.14};  // 错误:不能将 double 赋值给 int
int y = 3.14; // 有效,但 y 被截断为 3

 通过使用 {} 初始化,编译器会检测并阻止潜在的错误转换,增强了代码的安全性。

类和结构体的初始化

C++11 的 {} 初始化同样适用于类和结构体对象:

struct Point {int x;int y;
};Point p1{1, 2};  // 直接初始化
Point p2 = {3, 4}; // 复制初始化

对于类对象,C++11 允许通过 {} 初始化来调用构造函数:

class MyClass {
public:MyClass(int a, int b) : x(a), y(b) {}
private:int x, y;
};MyClass obj{10, 20}; // 调用 MyClass 的构造函数

数组和容器的初始化

C++11 使得数组和标准库容器的初始化更加简洁和直观:

int arr[] = {1, 2, 3, 4, 5};   // 数组初始化
std::vector<int> vec{1, 2, 3, 4, 5}; // std::vector 初始化
std::map<int, std::string> m = {{1, "one"},{2, "two"},{3, "three"}
}; // std::map 初始化

这种统一的列表初始化方式不仅简化了代码,还增强了代码的可读性和一致性,使开发者能够更轻松地管理复杂的数据结构。 

2.2initializer_list

C++11 引入了 initializer_list 类型,以支持更加灵活和统一的列表初始化。initializer_list 是标准库中的一个模板类,允许构造函数和其他函数接收一个初始化列表,从而简化了容器和对象的初始化过程。

2.2.1initializer_list 的基本用法

initializer_list 提供了一种方式,使得函数可以接收一组由花括号 {} 包裹的初始值。以下是一个简单的示例:

#include <initializer_list>
#include <iostream>void printList(std::initializer_list<int> list) {for (auto elem : list) {std::cout << elem << " ";}std::cout << std::endl;
}int main() {printList({1, 2, 3, 4, 5});return 0;
}

在这个例子中,函数 printList 接受一个 initializer_list<int> 类型的参数,并通过范围循环(range-based for loop)来遍历并打印列表中的元素。

2.2.2用于类的 initializer_list 构造函数

initializer_list 常用于定义容器类的构造函数,使得容器类可以接受初始化列表,从而简化对象的初始化。例如:

#include <initializer_list>
#include <vector>
#include <iostream>class MyContainer {
public:MyContainer(std::initializer_list<int> list) {for (auto elem : list) {data.push_back(elem);}}void print() const {for (auto elem : data) {std::cout << elem << " ";}std::cout << std::endl;}private:std::vector<int> data;
};int main() {MyContainer container = {1, 2, 3, 4, 5};container.print();return 0;
}

 在这个例子中,MyContainer 类的构造函数接受一个 initializer_list<int> 类型的参数,并使用该列表初始化 data 成员。这样,用户可以直接使用花括号语法来初始化 MyContainer 对象。

2.2.3与标准库容器的结合

initializer_list 在标准库容器中得到了广泛应用。例如,std::vectorstd::setstd::map 等容器都支持通过 initializer_list 进行初始化:

#include <vector>
#include <set>
#include <map>
#include <iostream>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};std::set<std::string> strSet = {"one", "two", "three"};std::map<int, std::string> intToStrMap = {{1, "one"},{2, "two"},{3, "three"}};for (int num : vec) {std::cout << num << " ";}std::cout << std::endl;for (const auto& str : strSet) {std::cout << str << " ";}std::cout << std::endl;for (const auto& pair : intToStrMap) {std::cout << pair.first << ": " << pair.second << " ";}std::cout << std::endl;return 0;
}

输出结果:

1 2 3 4 5
one three two
1: one 2: two 3: three 

在这个示例中,std::vectorstd::setstd::map 都通过 initializer_list 进行了初始化,使得代码更加简洁和易读。

2.2.4优势与注意事项

使用 initializer_list 具有以下几个优势:

  1. 简洁性:通过花括号 {} 初始化列表,使得代码更加简洁和直观。
  2. 一致性:提供了一种统一的初始化语法,适用于各种类型的对象。
  3. 安全性:避免了某些类型转换问题,提高了代码的安全性。

然而,使用 initializer_list 时也需注意以下几点:

  1. 不可修改initializer_list 本身是不可修改的,不能添加或删除元素。
  2. 生命周期initializer_list 的元素是对外部数组的引用,使用时需要确保数组的生命周期长于 initializer_list

3.新声明

C++11 引入了几种新的类型声明方式,使得代码更加简洁和易于维护。新的类型声明方式包括 autodecltypenullptr,它们极大地增强了 C++ 语言的类型推导能力和代码安全性。

3.1auto

auto 关键字允许编译器根据初始化表达式自动推导变量的类型,从而简化了变量声明,特别是在复杂类型的声明中。

3.1.1基本用法

auto 可以用于推导任何类型的变量,包括基本类型、指针、引用、容器迭代器等:

int x = 10;
auto a = x;  // a 被推导为 int 类型double y = 5.5;
auto b = y;  // b 被推导为 double 类型auto c = &x;  // c 被推导为 int* 类型std::vector<int> vec = {1, 2, 3};
auto it = vec.begin();  // it 被推导为 std::vector<int>::iterator 类型

3.1.2优势

使用 auto 的优势包括:

  1. 简化代码:减少冗长的类型声明,特别是在使用 STL 容器和迭代器时。
  2. 提高可读性:让代码更简洁,更易读。
  3. 减少错误:降低手动写错类型的风险,特别是在类型复杂或容易变化时。

3.1.3注意事项

尽管 auto 带来了诸多便利,但在使用时需要注意以下几点:

  1. 明确性:在某些情况下,auto 可能会降低代码的明确性和可读性,需要开发者对推导出的类型有清晰的认识。

  2. 推导规则auto 会根据右值表达式推导类型,有时可能会与预期不符。例如,数组类型会被推导为指针类型:

    int arr[3] = {1, 2, 3};
    auto p = arr;  // p 被推导为 int*
    

3.2decltype

decltype 关键字用于查询表达式的类型,并返回该类型。它在泛型编程和模板编程中尤为有用,可以精确地推导出变量或表达式的类型。

3.2.1基本用法

decltype 主要用于变量声明、函数返回类型推导等:

int x = 10;
decltype(x) y = 20;  // y 的类型与 x 相同,都是 intconst int& z = x;
decltype(z) w = x;  // w 的类型与 z 相同,都是 const int&

3.2.2与 auto 的区别

auto 是根据初始化表达式推导类型,而 decltype 则是根据表达式的类型进行推导。以下是一个对比示例:

int x = 10;
auto a = x;       // a 是 int
decltype(x) b = x; // b 是 intconst int& y = x;
auto c = y;       // c 是 int,丢弃了 const 和引用
decltype(y) d = y; // d 是 const int&

3.2.3用于返回类型推导

在模板编程中,decltype 常用于推导函数的返回类型:

template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {return a + b;
}

3.3nullptr

C++11 引入了 nullptr 关键字,用于表示空指针,替代了传统的 NULL 宏。nullptr 是一个类型安全的空指针字面值,避免了 NULL 可能引发的类型转换问题。

3.3.1基本用法

nullptr 可以与任意指针类型兼容:

int* p1 = nullptr;  // int* 类型的空指针
double* p2 = nullptr;  // double* 类型的空指针void func(int* ptr) {if (ptr == nullptr) {std::cout << "Pointer is null" << std::endl;}
}int main() {func(nullptr);  // 安全地传递空指针return 0;
}

3.3.2与 NULL 的区别

NULL 宏通常定义为 0(void*)0,在某些情况下可能引发类型不匹配的问题:

void f(int);
void f(void*);f(0);      // 调用 f(int)
f(NULL);   // 调用 f(int),可能意图是 f(void*)
f(nullptr); // 调用 f(void*),避免了歧义

3.3.3优势

使用 nullptr 的优势包括:

  1. 类型安全:避免了 NULL 引发的类型转换问题。
  2. 代码清晰:显式表示指针为空,使代码更具可读性。

4.小结

C++11 引入的列表初始化和新的类型声明方式,使得 C++ 语言更加强大和易用。花括号 {} 初始化和 initializer_list 提供了统一的初始化方式,简化了对象的创建过程;而 autodecltypenullptr 则增强了类型推导能力,减少了代码中的冗余和错误。掌握这些新特性,可以显著提高 C++ 编程的效率和代码质量。

相关文章:

C++11 列表初始化与类型声明

目录 ​ 0.前言 1.C11介绍 2.统一的列表初始化 2.1{}初始化 2.2initializer_list 2.2.1initializer_list 的基本用法 2.2.2用于类的 initializer_list 构造函数 2.2.3与标准库容器的结合 2.2.4优势与注意事项 3.新声明 3.1auto 3.1.1基本用法 3.1.2优势 3.1.3注意事项 3.2declt…...

缓存策略自定义:Laravel应用性能优化秘籍

缓存策略自定义&#xff1a;Laravel应用性能优化秘籍 在现代Web应用中&#xff0c;缓存是一种提高应用性能和响应速度的有效手段。Laravel框架提供了强大的缓存机制&#xff0c;支持多种缓存驱动&#xff0c;如文件、数据库、Redis等。然而&#xff0c;在某些情况下&#xff0…...

python连接sqlserver,封装操作

1封装 # 导入Flask类 import pymssql import tracebackclass Mssql(object):# 连接库def base(database):connect pymssql.connect(usersa,password123456,databasef{database},charsetutf8,as_dictTrue)if connect:print("数据库连接成功&#xff01;")else:print…...

原生PHP/JS自主开发的交友内核框架婚恋交友系统V10

本文来自&#xff1a;婚恋交友系统V10 - 源码1688 应用介绍 原生PHP/JS自主开发的交友内核框架&#xff0c;极高性能、无捆绑、自主权、无流水扣点、独立全开源 01脱单盲盒&#xff1a;脱单盲盒类似于漂流瓶&#xff0c;先将自己《投放》到盲盒中&#xff0c;另一伴有缘将您取…...

如何在Java、Python、GO程序中使用AI人脸识别API接口

AI人脸识别是一种通过面部识别或确认一个人身份的软件。它通过识别和测量图像中的面部特征来工作。面部识别可以识别图像或视频中的人脸&#xff0c;确定两幅图像中的人脸是否属于同一个人&#xff0c;或者在大量现有图像中搜索人脸。 AI人脸识别的优势是什么&#xff1f; 高…...

在vue使用MQTT

在vue中使用MQTT 最近有个需求&#xff0c;需要前端直接链接mqtt&#xff0c;想到后面可能多出使用&#xff0c;就封装成了hooks 中间遇到了一个坑&#xff0c;就是浏览器默认不支持mqtt协议&#xff0c;其借助了webSocket实现的mqtt协议&#xff0c; 而mqtt默认未开启webSocke…...

DNS、网关、IP、DHCP

DNS、网关、IP、DHCP&#xff1a;深入剖析与理解 在计算机网络的世界中&#xff0c;DNS、网关、IP和DHCP是四个至关重要的概念&#xff0c;它们共同构建了互联网的基础架构&#xff0c;确保了数据的准确传输和设备的有效连接。本文将深入剖析这四个概念&#xff0c;帮助读者更…...

vue2 vue3 props 的处理机制

在 Vue 2 中&#xff0c;props 是单向数据流&#xff0c;父组件向子组件传递的 props 默认情况下是不具有响应式特性的。这意味着当父组件的数据发生变化时&#xff0c;如果传递给子组件的 props 发生变化&#xff0c;子组件不会自动更新视图。 具体来说&#xff0c;在 Vue 2 …...

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…...

ValueError: invalid literal for int() with base 10: ‘a‘

ValueError: invalid literal for int() with base 10: ‘a‘ 目录 ValueError: invalid literal for int() with base 10: ‘a‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff…...

[C++探索]初始化列表,static成员,友元函数,内部类,匿名对象

&#x1f496;&#x1f496;&#x1f496;欢迎来到我的博客&#xff0c;我是anmory&#x1f496;&#x1f496;&#x1f496; 又和大家见面了 欢迎来到C探索系列 作为一个程序员你不能不掌握的知识 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站…...

搭建自己的金融数据源和量化分析平台(二):读取上交所股票列表

我在上交所没发现上交所有像深交所一样的一键下载股票xls文档的按钮&#xff0c;因此上交所的股票列表读取就会比较麻烦。总体思路是查出来所有股票的代码之后根据股票代码逐一发起HTTP请求读取公司英文名、总股本、流通股本等详细信息&#xff0c;这就导致上交所爬虫的网络交互…...

Kafka知识总结(分区机制+压缩机制+拦截器+副本机制)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 分区机制 分区策略 分区策略是决定生产者将消息发送到哪个分区的…...

WordPress原创插件:搜索引擎抓取首图seo图片

WordPress原创插件&#xff1a;搜索引擎抓取首图seo图片 插件设置 插件将在网站头部添加适当的meta标签&#xff0c;以便百度等搜索引擎抓取指定的固定图像。 插件下载 https://download.csdn.net/download/huayula/89596527...

Android Framework 之AMS

它管理了系统的四大组件:Activity、Service、ContentProvider、Broadcast。 它除了管理四大组件外&#xff0c;同时也负责管理和调度所有的进程 AMS相关目录结构 AMS代码主要在下面几个目录(AndroidQ上AMS相关部分功能移到了wm下)&#xff1a; frameworks/base/core/java/andro…...

AnConda环境配置学习笔记

AnConda环境配置 个人笔记&#xff0c;自己学习使用。 1、软件安装 去官网或者是清华大学镜像下载 2、环境配置 Conda 查看版本&#xff1a;conda --version 更新所有库 conda update --all&#xff08;千万不要跟新&#xff0c;版本不匹配&#xff09; matploitlib安装cond…...

架构师的36项修炼 学习笔记

架构师的36项修炼 学习笔记 分布式缓存 缓存特点 1.技术简单 2.性能提升明显 3.应用场景多 缓存数据存储 hash表 缓存的关键指标 命中率 缓存失效方式 超时失效 LLT 实时清除 代理缓存 反向代理缓存 多层反向代理缓存 内容分发网络CDN 通读缓存 包括代理缓存…...

Python | “IndexError: tuple index out of range” 【已解决】

Python | “IndexError: tuple index out of range” 【已解决】 IndexError: tuple index out of range 深度解析与实战指南 在Python编程中&#xff0c;IndexError: tuple index out of range是一个常见的错误&#xff0c;它发生在尝试访问元组&#xff08;或其他可索引的数…...

Linux上部署easySpider及基本使用

一、安装及简介 默认使用Chrome浏览器。 1、下载压缩包 官网&#xff1a;易采集EasySpider&#xff1a;无代码可视化爬虫/浏览器自动化测试软件 Linux版只适用于Ubuntu 20.04及以上版本、Deepin、Debian及其衍生版本。 &#xff08;建议使用&#xff09;下载网址/Github下…...

Qt Designer,仿作一个ui界面的练习(二):部件内容的填充

有了完成了布局的基本框架设计之后&#xff0c;对各个部件逐步完成内容的填充。 一、还是从顶边栏开始&#xff1a; 1、在顶边栏的topLogo里面拖入一个QLabel&#xff08;标签&#xff09;&#xff0c;命名为logoImage&#xff0c;删除标签的文字。 2、右键点击topLogo&#x…...

LIS2DH12传感器底电流100ua处理

默认已经正常初始化IIC和LIS2DH12之后&#xff0c;需要正常开启和进入低功耗传感器的处理。 主要是对两个寄存器的处理&#xff1a;20、1E ODR[3&#xff1a;0]数据速率选择。默认值&#xff1a;0000&#xff08;0000&#xff1a;断电模式&#xff1b;其他&#xff1a;见表31&a…...

五、Spring Boot - 上手篇(1)

&#x1f33b;&#x1f33b;目录 一、快速入门&#xff1a;创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成&#xff0c;工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…...

Spring -- 使用XML开发MyBatis

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 文章目录 MyBatis XML配置文件开发配置连接字符串和MyBatis写Mapper层代码添加mapper接口添加UserInfoXmLMapper.xml 操作数据库INSERTDELETE & UPDATE MyBatis XML配置文件开发 实际上,除…...

openmv 学习笔记(24电赛笔记)

寻找特定目标 这个功能主要应用在&#xff0c;机器人寻找色块&#xff0c;无人机跟踪特定颜色&#xff0c;生产线上检测物体进行分类&#xff0c;还有人机交互等等功能应用。 相关函数 image.find_blobs(thresholds, roiAuto, x_stride2, y_stride1, invertFalse, area_thr…...

【C语言】【数据结构】二分查找(数组的练习)

目录 一、什么是二分查找 二、算法思想 2.1、概述 2.2、举例 &#xff08;1&#xff09;查找3&#xff08;数组里面存在的数&#xff09; &#xff08;2&#xff09;查找12&#xff08;数组里面不存在的数&#xff09; 三、代码实现 四、计算mid公式的优化 一、…...

Web:Url 编码 -13

URL编码概述 HTTP协议只支持iso8859-1字符集。 而此字符集中只有英文数字常见符号。 所以HTTP原生是无法传输非iso8859-1字符的。 为了解决这个问题&#xff0c;提出了一种称之为URL编码的解决方案。 URL编解码详解 将非iso8859-1字符&#xff0c;进行转换 先将字符按照指定码表…...

typescript 引用数据类型

let arr1: number[] [1, 2, 3]; // 规定为数组数字 let arr2: (number | string)[] ["1", 2, 3]; // 数字或字符串 &#xff5c;就代表联合类型 也称元组 let arr3: [null, string] [null, "1"]; // 必须两个值&#xff1a;null和字符串 let arr4: […...

OpenCV库学习之cv2.Sobel函数

OpenCV库学习之cv2.Sobel函数 一、简介 cv2.Sobel是OpenCV库中用于边缘检测的函数。它基于Sobel算子&#xff0c;通过计算图像在水平和垂直方向上的一阶导数来检测边缘。Sobel算子是一种离散差分算子&#xff0c;能够有效地突出图像中的高频变化区域&#xff0c;即边缘。 二、…...

上传Git 仓库 勤勉git (超详细教程)

注册 官网&#xff1a; 我就喜欢动个仓库名字和分支名字 就创建了...

C/C++基础:宏

C/C基础&#xff1a;宏 简述宏的简单使用基础语法带参宏&#xff08;宏函数&#xff09;宏参字符串化#宏拼接## 宏的陷阱多行定义宏中的空格宏函数不是函数行末分号问题一些建议 宏的奇妙使用 简述 宏作为C/C最有特色的语言性质之一&#xff0c;犹如魔法一般&#xff0c;合理的…...

「豆包Marscode体验官」AI加持的云端IDE——三种方法高效开发前后端聊天交互功能

豆包 MarsCode 是一个集成了AI功能的编程助手和云端IDE&#xff0c;旨在提高开发效率和质量。它支持多种编程语言和IDE&#xff0c;提供智能代码补全、代码解释、单元测试生成和问题修复等功能&#xff0c;同时具备AI对话视图和开发工具。 豆包 MarsCode 豆包 MarsCode 编程助…...

一文带你掌握C++虚函数·和多态

9. C虚函数与多态 虚函数 virtual修饰的成员函数就是虚函数 虚函数对类的内存影响:需要增加一个指针类型的内存大小无论多少虚函数&#xff0c;只会增加一个指针类型的内存大小虚函数表的概念: 指向虚函数的指针 我们自己也可以通过虚函数表指针去访问函数(一般做这样的操作…...

OpenCV 4.10 + OpenCV_contrib配置教程 仅供参考

参考&#xff1a;https://blog.csdn.net/qq_27278957/article/details/108224325 https://blog.csdn.net/weixin_43763292/article/details/130232863 OpenCV&#xff1a;https://github.com/opencv/opencv/releases/tag/4.10.0 OpcenCV_contrib: https://github.com/opencv/o…...

ClkLog:开源用户行为分析框架,让数据分析更轻松

ClkLog&#xff1a;开源用户行为分析框架&#xff0c;让数据分析更轻松 在数据驱动的时代&#xff0c;找到一个好用的用户行为分析工具真是难上加难。但是今天你有福了&#xff0c;开源免费的 ClkLog 就是你的不二选择&#xff01;本文将为你详细介绍 ClkLog 的功能特点、技术架…...

Spring源码学习笔记之@Async源码

文章目录 一、简介二、异步任务Async的使用方法2.1、第一步、配置类上加EnableAsync注解2.2、第二步、自定义线程池2.2.1、方法一、不配置自定义线程池使用默认线程池2.2.2、方法二、使用AsyncConfigurer指定线程池2.2.3、方法三、使用自定义的线程池Excutor2.2.4、方法四、使用…...

面试题:如何验证代码的可靠性

代码结构上的&#xff1a; 1 可扩展性 是否否和开闭原则 2 性能&#xff0c;数据结构用的是否合理&#xff0c;算法等是否效率高。 3 安全性 是否存在潜在的安全 整数溢出 SQL注入 等 4 代码复杂度 圈负杂度 if嵌套深度 函数长度等 5 函数变量的命名是否具有自解释性 1. …...

前端开发的十字路口,薪的出口会是AI吗?

前言 在数字化转型的浪潮中&#xff0c;前端开发一直扮演着至关重要的角色&#xff0c;它连接着用户与产品之间的桥梁。然而&#xff0c;随着技术的不断进步和社会经济环境的变化&#xff0c;前端开发领域也面临着前所未有的挑战和机遇。 前端开发的困境 前端开发领域的竞争…...

pdf太大怎么压缩大小?这几种压缩方法操作起来很简单!

pdf太大怎么压缩大小&#xff1f;在数字化洪流席卷的当下&#xff0c;PDF文件的“臃肿”难题如同巨石般横亘于高效办公之路&#xff0c;它们不仅贪婪地吞噬着宝贵的存储空间&#xff0c;更如沉重的枷锁&#xff0c;拖曳着我们的工作进度&#xff0c;步入迟缓之境&#xff0c;试…...

leetcode-148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&#x…...

16 html网页服务和nginx服务

第十六次7.29 1.静态页面 1安装httpd [rootweb ~]# yum -y install httpd 2.真机访问页面 [rootweb html]# echo "静态html文件" > index.html 传入照片再次访问 静态资源&#xff0c;根据开发着保存在项目资源目录中的路径访问静态页面的资源 2.Apache 1.安…...

C语言:扫雷游戏实现

一、扫雷游戏的分析和设计 扫雷游戏想必大家都玩过吧&#xff0c;初级的玩法是在一个9*9的棋盘上找到没有雷的格子&#xff0c;而今天我们就要做的就是9*9扫雷游戏的实现。 1、游戏功能和规则 使用控制台实现经典的扫雷游戏游戏可以通过菜单实现继续玩或者退出游戏扫雷的棋盘…...

算法入门:Java实现排序、查找算法

链接&#xff1a;算法入门&#xff1a;Java实现排序、查找算法 (qq.com) 冒泡/选择/插入/希尔排序代码 (qq.com) 快排/归并/堆排/基数排序代码 (qq.com)...

【初阶数据结构篇】顺序表的实现(赋源码)

文章目录 本篇代码位置顺序表和链表1.线性表2.顺序表2.1 概念与结构2.2分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.3.1动态顺序表的初始化和销毁及打印2.3.2动态顺序表的插入动态顺序表的尾插动态顺序表的头插动态顺序表的在指定位置插入数据 2.3.3动态顺序表…...

移动式气象站:便携科技的天气守望者

在科技日新月异的今天&#xff0c;我们身边的许多设备都在向着更加智能化、便携化的方向发展。而在气象观测领域&#xff0c;移动式气象站的出现&#xff0c;不仅改变了传统气象观测的固有模式&#xff0c;更以其灵活性和实时性&#xff0c;在气象监测、灾害预警等领域发挥着越…...

软件测试必备 - 14个接口与自动化测试练习网站

随着互联网和移动应用的快速发展,接口和自动化测试的重要性日益凸显。越来越多的企业开始重视API测试,因为它不仅能提升开发效率,还能确保系统的稳定性和安全性。这些练习网站为测试人员提供了宝贵的资源,帮助他们掌握必要的技能,应对日益复杂的测试需求。 在软件测试的世…...

基于 HTML+ECharts 实现的数据可视化大屏案例(含源码)

数据可视化大屏案例&#xff1a;基于 HTML 和 ECharts 的实现 数据可视化已成为企业决策和业务分析的重要工具。通过直观、动态的图表展示&#xff0c;数据可视化大屏能够帮助用户快速理解复杂的数据关系&#xff0c;发现潜在的业务趋势。本文将介绍如何利用 HTML 和 ECharts 实…...

vardaccico前端私有库

vardacico docker pull verdaccio/verdaccio:4 docker run -it --rm --name verdaccio -p 4873:4873 verdaccio/verdaccio Docker | Verdaccio 拷贝docker中的配置到宿主机 进入docker内部 docker exec -it verdaccio /bin/sh 进入到指定目录 cd /verdaccio 开始拷贝到指定目…...

先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab)

先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#xff09; 目录 先用先发&#xff01;小样本故障诊断新思路&#xff01;Transformer-SVM组合模型多特征分类预测/故障诊断&#xff08;Matlab&#…...

学习大数据DAY26 简单数据清洗练习和 Shell 脚本中的数据库编程

目录 上机练习 14 mysql 命令 sql 语句实现步骤 shell 脚本导入 csv 格式文件到 mysql 数据库 secure-file-priv 特性 把文件拷贝到 mysql 指定目录下 上机练习 15 mysqldump 命令 上机练习 16 上机练习 14 运用上一节课学的 Shell 工具完成 1. 清洗数据《infotest.t…...

开发业务(3)——swoole和聊天室入门开发

在普通的PHP代码里面&#xff0c;我们不需要考虑性能和异步问题&#xff0c;包括不限于我们想要使用php搭建一个http服务器&#xff08;在node/python/go里面都有http模块&#xff0c;但是PHP没有这种功能&#xff09;。而同样的原因&#xff0c;很难实现php游戏的开发&#xf…...