类型转换与IO流:C++世界的变形与交互之道
文章目录
- 前言
- 🎄一、类型转换
- 🎈1.1 隐式类型转换
- 🎈1.2 显式类型转换
- 🎁1. C 风格强制类型转换
- 🎁2. C++ 类型转换操作符
- 🎈1.3 C++ 类型转换操作符详解
- 🎁1. `static_cast`
- 🎁2. `dynamic_cast`
- 🎁3. `const_cast`
- 🎁4. `reinterpret_cast`
- 🎈1.4 类型转换的适用场景对比
- 🎈1.5 类型转换的注意事项
- 🎄二、C++IO流
- 🎈2.1 IO流的分类
- 🎁1. 标准输入输出流
- 🎁2. 文件流
- 🎁3. 字符串流
- 🎈2.2 基本用法
- 🎁1. 标准输入输出流
- 🎁2. 文件流
- 🎈2.3 常用 IO 流方法
- 🎁1. 输入流 (`istream`) 的方法
- 🎁2. 输出流 (`ostream`) 的方法
- 🎈2.4 文件流的常用操作
- 🎈2.5 字符串流
- 🎁1. `std::stringstream` 的基本构造函数
- 🎁2. 常用操作
- 🎉a. 写入字符串
- 🎉b. 读取字符串
- 🎉c. 重置流内容
- 🎉d. 添加 `clear()` 的场景
- 🎈2.6 错误处理
- 结语
前言
在现代编程中,C++作为一种强大的面向对象编程语言,其灵活性和高效性在开发中得到了广泛应用。类型转换和输入输出流(IO流)是C++语言的两个重要组成部分。前者是数据处理与操作的桥梁,后者是数据交互的核心。掌握这些内容不仅可以提高代码的健壮性,还能显著提升开发效率与代码可读性。本文将深入探讨C++中的类型转换和IO流机制,助您在实际应用中游刃有余。
🎄一、类型转换
C++ 提供了多种类型转换方法,用于将一种类型的对象转换为另一种类型。类型转换可以分为隐式类型转换和显式类型转换(强制类型转换)。C++ 提供了更安全和灵活的类型转换操作符(如 static_cast
、dynamic_cast
等),以替代传统的 C 风格转换。
🎈1.1 隐式类型转换
隐式类型转换由编译器自动完成,当一种类型的数据被赋值或传递给另一种兼容类型的变量时,编译器会自动进行转换。
示例:
#include <iostream>
int main() {int x = 10;double y = x; // 隐式转换:int -> doublestd::cout << "y = " << y << std::endl; // 输出:10.0double z = 3.14;int a = z; // 隐式转换:double -> intstd::cout << "a = " << a << std::endl; // 输出:3 (精度丢失)return 0;
}
隐式转换注意事项
- 数据精度问题:从
double
转换为int
时会丢失小数部分。 - 范围问题:从
long
转换为short
时可能会导致溢出。
🎈1.2 显式类型转换
显式类型转换是开发者明确告诉编译器需要进行类型转换。C++ 提供了两种方法:
- C 风格类型转换
- C++ 类型转换操作符
🎁1. C 风格强制类型转换
语法:(目标类型) 表达式
或 目标类型(表达式)
。
示例:
#include <iostream>
int main() {double x = 3.14;int y = (int)x; // C 风格强制类型转换std::cout << "y = " << y << std::endl; // 输出:3return 0;
}
缺点
- 不安全:编译器无法检查转换是否合理。
- 可读性差:无法通过语法分辨转换的目的。
🎁2. C++ 类型转换操作符
C++ 提供了以下四种类型转换操作符,用于实现更安全、更灵活的显式类型转换:
static_cast
dynamic_cast
const_cast
reinterpret_cast
🎈1.3 C++ 类型转换操作符详解
🎁1. static_cast
功能:
- 编译时类型转换,用于基本类型之间的转换。
- 父类和子类指针或引用之间的转换(要求类型相关性)。
示例:
#include <iostream>
class Base {};
class Derived : public Base {};int main() {int x = 10;double y = static_cast<double>(x); // 基本类型转换std::cout << "y = " << y << std::endl;Derived d;Base* basePtr = static_cast<Base*>(&d); // 子类指针转基类指针return 0;
}
特点:
- 编译器检查类型是否兼容。
- 无法转换完全无关的类型。
🎁2. dynamic_cast
功能:
- 运行时类型转换,用于多态类型之间的安全转换。
- 主要用于基类指针或引用转换为派生类指针或引用。
示例:
#include <iostream>class A {
public:// 只有包含虚函数才能转换virtual void f(){}int x;
};class B : public A {
public:int y;
};void func(A* pa) {// pa是指向子类对象B的,转换可以成功,否则失败B* pb = dynamic_cast<B*>(pa);if (pb) {std::cout << "转换成功" << std::endl;pb->x++;pb->y++;}else {std::cout << "转换失败" << std::endl;}
}int main() {// 传入基类对象 aaA aa;func(&aa);//传入派生类对象 bbB bb;func(&bb);return 0;
}
特点:
- 依赖于运行时类型信息(RTTI)。
- 只适用于含有虚函数的类。
🎁3. const_cast
功能:
- 用于移除或添加
const
限定符。 - 不能用于转换底层常量性(即实际的常量数据)。
示例:
#include <iostream>int main() {volatile const int n = 10; // volatile用于告诉编译器:该变量的值可能在程序的控制流之外被改变int* p = const_cast<int*>(&n);(*p)++;std::cout << n; // 输出11return 0;
}
特点:
- 如果尝试修改实际的常量数据,会导致未定义行为。
volatile
告诉编译器:- 不要对该变量进行优化。
- 每次访问变量时都必须从内存中重新读取,而不能使用寄存器中的缓存值。
- 对变量的写入也必须立即刷新到内存中。
🎁4. reinterpret_cast
功能:
- 用于进行低级别的不相关类型转换。
- 可以在指针、整数、浮点数之间进行转换。
示例:
#include <iostream>
int main() {int x = 65;char* ptr = reinterpret_cast<char*>(&x); // 将整数指针转为字符指针std::cout << *ptr << std::endl; // 输出字符 'A'return 0;
}
特点:
- 最不安全的类型转换,可能导致未定义行为。
- 通常用于底层编程。
🎈1.4 类型转换的适用场景对比
类型转换操作符 | 适用场景 | 安全性 |
---|---|---|
隐式转换 | 基本类型之间,子类到父类 | 安全 |
C 风格强制转换 | 任意类型之间的转换,简便但不安全 | 不安全 |
static_cast | 编译时类型兼容的转换,如基本类型、父子类指针 | 较安全 |
dynamic_cast | 多态类型之间的运行时转换,确保转换合法 | 安全 |
const_cast | 添加或移除 const ,仅限逻辑常量性 | 有风险 |
reinterpret_cast | 不相关类型之间的低级别转换(如指针、整数) | 不安全 |
🎈1.5 类型转换的注意事项
- 优先使用 C++ 类型转换操作符:
static_cast
和dynamic_cast
提供了更高的安全性和可读性。- 避免使用 C 风格的强制转换。
- 小心
const_cast
和reinterpret_cast
:const_cast
不允许修改实际的常量对象。reinterpret_cast
只能用于底层编程,慎用。
- 尽量避免不必要的类型转换:
- 类型转换可能引入性能开销或引发未定义行为,只有在必要时才使用。
🎄二、C++IO流
C++ 中的 IO流(Input/Output Streams) 是一种用于处理输入和输出操作的类库,提供了强大的功能来读写数据。IO流通过标准库中的类(如 istream
和 ostream
)实现了对各种设备(如控制台、文件等)的输入输出操作。
🎈2.1 IO流的分类
C++ 中的 IO 流主要分为以下几类:
🎁1. 标准输入输出流
std::cin
:标准输入流,用于从键盘输入。std::cout
:标准输出流,用于输出到屏幕。std::cerr
:标准错误流,用于错误消息输出,不带缓冲。std::clog
:标准日志流,用于日志输出,带缓冲。
🎁2. 文件流
std::ifstream
:输入文件流,用于从文件中读取数据。std::ofstream
:输出文件流,用于将数据写入文件。std::fstream
:文件读写流,可同时读取和写入文件。
🎁3. 字符串流
std::istringstream
:字符串输入流,从字符串中读取数据。std::ostringstream
:字符串输出流,将数据写入字符串。std::stringstream
:字符串读写流,可同时读写字符串。
🎈2.2 基本用法
🎁1. 标准输入输出流
#include <iostream>
#include <string>int main() {std::string name;int age;// 输入std::cout << "Enter your name: ";std::cin >> name;std::cout << "Enter your age: ";std::cin >> age;// 输出std::cout << "Hello, " << name << "! You are " << age << " years old." << std::endl;return 0;
}
运行示例:
Enter your name: Alice
Enter your age: 25
Hello, Alice! You are 25 years old.
🎁2. 文件流
写文件:
#include <iostream>
#include <fstream>int main() {std::ofstream outfile("example.txt"); // 打开文件以写入if (outfile.is_open()) {outfile << "Hello, File IO!" << std::endl;outfile.close(); // 关闭文件} else {std::cerr << "Unable to open file for writing." << std::endl;}return 0;
}
读文件:
#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream infile("example.txt"); // 打开文件以读取if (infile.is_open()) {std::string line;while (std::getline(infile, line)) {std::cout << line << std::endl; // 输出文件内容}infile.close(); // 关闭文件} else {std::cerr << "Unable to open file for reading." << std::endl;}return 0;
}
🎈2.3 常用 IO 流方法
🎁1. 输入流 (istream
) 的方法
std::cin.get()
: 获取单个字符,包括空格和换行符。std::cin.ignore()
: 忽略输入的一个或多个字符。std::cin.peek()
: 查看下一个字符而不提取它。std::cin.eof()
: 检查是否到达输入流的末尾。
#include <iostream>
int main() {char ch;std::cin.get(ch); // 获取一个字符std::cout << "You entered: " << ch << std::endl;std::cin.ignore(100, '\n'); // 忽略 100 个字符或直到换行符return 0;
}
🎁2. 输出流 (ostream
) 的方法
std::cout.put()
: 输出单个字符。std::cout.write()
: 输出一个字符数组。std::cout.flush()
: 强制刷新输出缓冲区。
#include <iostream>
int main() {std::cout.put('A'); // 输出单个字符std::cout.write("Hello, World!", 5); // 输出前 5 个字符std::cout.flush(); // 刷新缓冲区return 0;
}
🎈2.4 文件流的常用操作
open(filename, mode)
: 打开文件。close()
: 关闭文件。is_open()
: 检查文件是否成功打开。eof()
: 检查是否到达文件末尾。- 文件打开模式:
std::ios::in
:读模式(默认)。std::ios::out
:写模式(默认)。std::ios::app
:追加模式。std::ios::ate
:打开文件并移动到文件末尾。std::ios::binary
:以二进制模式打开文件。
#include <iostream>
#include <fstream>int main() {std::fstream file;file.open("example.txt", std::ios::out | std::ios::app); // 打开文件用于写入和追加if (file.is_open()) {file << "Appending this line to the file.\n";file.close();}return 0;
}
🎈2.5 字符串流
std::stringstream
是 C++ 标准库中的字符串流类,它提供了对内存中字符串的输入、输出和格式化功能。std::stringstream
属于 std::iostream
的派生类,可以像操作文件流或标准输入输出流一样操作字符串。
std::stringstream
常用于:
- 将变量格式化为字符串。
- 从字符串中解析数据。
- 在内存中进行类似文件的流操作。
🎁1. std::stringstream
的基本构造函数
std::stringstream(); // 默认构造,创建一个空字符串流
std::stringstream(const std::string& str); // 使用指定的字符串初始化
std::stringstream(std::ios_base::openmode mode); // 指定模式初始化
🎁2. 常用操作
🎉a. 写入字符串
使用 <<
运算符将数据写入流,或者调用 str()
方法获取流中的字符串。
示例:写入并获取字符串
#include <iostream>
#include <sstream>
#include <string>int main() {std::stringstream ss;ss << "Hello, " << "stringstream! " << 123;std::string result = ss.str();std::cout << "Stream content: " << result << std::endl;return 0;
}
输出:
Stream content: Hello, stringstream! 123
🎉b. 读取字符串
使用 >>
运算符从字符串流中提取数据,或者通过 getline()
方法逐行读取。
示例:从字符串中提取数据
#include <iostream>
#include <sstream>
#include <string>int main() {std::string data = "123 456 789";std::stringstream ss(data);int x, y, z;ss >> x >> y >> z;std::cout << "Parsed numbers: " << x << ", " << y << ", " << z << std::endl;return 0;
}
输出:
Parsed numbers: 123, 456, 789
类型转换:
stringstream
的operator>>
会自动将流中的字符串片段转换为目标类型(这里是int
)。- 如果目标类型是整数类型,则会从字符串中提取数字并完成
string -> int
的转换。 - 如果流中的内容无法正确解析为整数,则流状态会标记为失败,后续操作可能会被跳过。
🎉c. 重置流内容
- 使用
str()
方法设置或获取流内容。 - 调用
clear()
重置流的状态。
示例:重置流内容
=#include <iostream>
#include <sstream>
#include <string>int main() {std::stringstream ss;ss << "First content";// 获取当前内容std::cout << "Before reset: " << ss.str() << std::endl;// 重置流内容ss.str("New content");ss.clear();std::cout << "After reset: " << ss.str() << std::endl;return 0;
}
输出:
Before reset: First content
After reset: New content
关键点:
-
clear()
是用来重置流的错误状态标志(如failbit
、eofbit
、badbit
)。在流出现错误状态后,继续对其操作可能会失败,clear()
可以清除这些状态,使流回到正常状态。 -
在没有发生错误的情况下,
clear()
不需要调用。 -
替换内容(
str("New content")
)不会导致错误状态,因此即使不调用clear()
,流仍然可以正常工作。
🎉d. 添加 clear()
的场景
clear()
在以下场景中是必要的:
- 如果之前的流操作导致了错误状态,例如读写失败或到达文件末尾(
eof()
)。 - 需要恢复流的正常状态以继续后续操作。
例如:
#include <iostream>
#include <sstream>
#include <string>int main() {std::stringstream ss("123");int x, y;ss >> x; // 成功读取 123ss >> y; // 失败:流已到达末尾,设置了 failbitif (ss.fail()) {std::cout << "Stream failed. Resetting...\n";ss.clear(); // 清除错误状态ss.str("456"); // 替换内容ss >> y; // 再次读取成功}std::cout << "y: " << y << std::endl;return 0;
}
输出:
Stream failed. Resetting...
y: 456
🎈2.6 错误处理
C++ IO流提供了多种方法来处理输入输出过程中的错误。
bad()
: 检查流是否因不可恢复错误而失败。fail()
: 检查流是否失败。eof()
: 检查是否到达文件或输入末尾。clear()
: 清除流的错误状态。
#include <iostream>
#include <fstream>int main() {std::ifstream file("nonexistent.txt"); // 打开文件if (!file) {if (file.bad()) {std::cerr << "Error: Irrecoverable error on file stream." << std::endl;} else if (file.fail()) {std::cerr << "Error: Failed to open file (logical error)." << std::endl;} else if (file.eof()) {std::cerr << "Error: End of file reached unexpectedly." << std::endl;}} else {std::cout << "File opened successfully." << std::endl;}return 0;
}
结语
C++中的类型转换为程序赋予了灵活的适应性,而IO流则提供了高效的数据交互方式。这两部分内容在C++开发中不可或缺,它们不仅能够提高程序的性能,还为开发者提供了更多的实现方式和选择。在实际开发中,善用这些特性,能够帮助我们编写出更加高效、可读性强的程序代码。希望通过本文的解析,您对C++类型转换与IO流有了更全面的了解,并能在开发实践中熟练运用。
今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,17的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就是17前进的动力!
相关文章:
类型转换与IO流:C++世界的变形与交互之道
文章目录 前言🎄一、类型转换🎈1.1 隐式类型转换🎈1.2 显式类型转换🎁1. C 风格强制类型转换🎁2. C 类型转换操作符 🎈1.3 C 类型转换操作符详解🎁1. static_cast🎁2. dynamic_cast&…...
go的web框架介绍
Go 语言有许多优秀的 Web 框架,适用于不同类型的 Web 应用开发,涵盖从简单的 API 开发到复杂的微服务架构。以下是一些常见的 Go Web 框架: 1. Gin 简介:Gin 是一个高性能的 Go Web 框架,设计目标是让开发者能够以极…...
WPF+MVVM案例实战与特效(三十一)- 封装一个加载动画的自定义控件
文章目录 1、案例效果2、案例实现1、资源与文件创建2、自定义控件封装3、自定义控件使用4、总结1、案例效果 2、案例实现 在开发WPF应用程序时,我们常常需要一个灵活的加载动画控件,该控件可以根据窗口的大小自动调整其内部元素(如图片、边框和文本)的尺寸,并且能够通过简…...
cocos creator 3.8 抖音、字节跳动录制器 12
property(Node) luzhishijianDisplay: Node null!;//录制时间显示 property(Node) luzhikaishiBut: Node null!;//录制开始 property(Node) luzhijieshuBut: Node null!;//录制结束 luzhikaishiType: boolean false;//是否开始录制开始计时 gameluzhiTime: number 0;onLoa…...
汽车控制软件下载移动管家手机控车一键启动app
移动管家手机控制汽车系统是一款实现车辆远程智能控制的应用程序。通过下载并安装特定的APP,用户可以轻松实现以下功能:远程启动与熄火:无论身处何地,只要有网络,即可远程启动或熄火车辆,提前预冷或预…...
自由学习记录(28)
C# 中的流(Stream) 流(Stream)是用于读取和写入数据的抽象基类。 流表示从数据源读取或向数据源写入数据的矢量过程。 C# 中的流类是从 System.IO.Stream 基类派生的,提供了多种具体实现,每种实现都针对…...
HarmonyOS开发:关于签名信息配置详解
目录 前言 签名信息的重要性 签名的方式 自动化签名 1、连接真机 2、选择 手动签名 (一)生成密钥和证书请求文件 (二)申请调试证书 (三)注册调试设备 (四)申请调试Profil…...
react 组件双向绑定
1. 使用 state 实现双向绑定 对于双向绑定,需要同时处理表单元素的value属性(通过state来设置)和onChange事件(用于更新state)。 import { useState } from "react";const MyComponent () > {const [i…...
k8s api对象,CRD
在Kubernetes项目中,一个API对象在Etcd里的完整资源路径,是由:Group(API组)、Version(API版本)和Resource(API资源类型)三个部分组成 apiVersion: batch/v2alpha1 kind:…...
详解MyBatis之篇一
目录 MyBatis 定义 使用MyBatis操作数据库 创建项目 配置 演示 UserInfo.java UserInfoMapper UserInfoMapperTest 数据准备 自动生成测试类 运行结果 MyBatis 定义 MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避…...
uniapp连接mqtt频繁断开原因和解决方法
mqtt参考文档:MQTT.js 入门教程 | EMQ、MQTT.js 入门教程 - EMQX - 博客园 uniapp引用MQTT频繁断开的问题可能由于以下几个原因导致: 网络不稳定:频繁断开可能是由于网络不稳定导致的,可以尝试优化网络连接。 心跳机制问题&…...
网络安全内容整理二
网络嗅探技术 网络监听 网络监听,也称网络嗅探(Network Sniffing):在他方未察觉的情况下捕获其通信报文、通信内容的技术 网卡的工作模式: 1.广播模式(Broadcast Mode):网卡能够接收网络中的广播信息 2.组播模式(Multicast Mo…...
IDE解说
IDE(Integrated Development Environment,集成开发环境) 是一种集成了多种开发工具的软件应用程序,旨在简化软件开发过程。 IDE 通常包括代码编辑器、编译器或解释器、调试器、构建自动化工具和版本控制系统等组件。通过将这些工…...
安心护送转运平台小程序
安心护送转运平台小程序是一款基于FastAdminThinkPHPUniapp开发的非急救救护车租用转运平台小程序系统,可以根据运营者的业务提供类似短途接送救护服务,重症病人转运服务,长途跨省护送服务。...
mongodb文档字符串批量替换
【mongodb文档字符串批量替换脚本语句】 前言: 1、本方式对于数据量大的情况不适用,执行可能比较慢; 2、数据量大的情况,个人推荐代码层面解决,多线程替换更快: (1)写实体类的方式…...
模拟实现vector(非常详细)
模拟实现vector 1.基本概念2.vector()默认构造函数3.size()4.capacity()5.empty()6.reverse7.push_back()8.pop_back()9.operator[ ]10.resize()11.insert() 1.基本概念 上一节我们讲了vector的概念以及常用的接口,这一节我们讲一下它的实现,它的底层其实…...
证明直纹极小曲面是平面或者正螺旋面.
目录 证明直纹极小曲面是平面或者正螺旋面 证明直纹极小曲面是平面或者正螺旋面 证明:设极小直纹面 S S S的参数表示为 r ( u , v ) a ( u ) v c ( u ) . (u,v)\mathbf{a}(u)v\mathbf{c}(u). (u,v)a(u)vc(u).则 r u a ′ v c ′ , r v c , r u ∧ r v a ′ ∧…...
电子应用设计方案-34:智能镜子系统方案设计
智能镜子系统方案设计 一、引言 智能镜子作为一种新兴的智能设备,将传统镜子与现代科技相结合,为用户提供了丰富的信息展示和交互功能。它不仅可以作为普通镜子使用,还能够显示天气、新闻、日程安排等信息,甚至可以与智能家居设备…...
前端项目从开发到部署全流程介绍
一、项目初始化 创建项目目录 首先创建一个新的项目目录,例如my - front - end - project。使用命令mkdir my - front - end - project && cd my - front - end - project。 初始化项目 使用npm init或yarn init来初始化项目,这会生成一个packag…...
Vue3.0组件之间通信(defineProps 和 defineEmits 及 defineExpose)
前言: 一、父传子 defineProps二、子传父 defineEmits三、子组件暴露属性和方法给父组件 defineExpose四、依赖注入Provide / Inject 在 <script setup> 中必须使用 defineProps 和 defineEmits API 来声明 props 和 emits ,它们具备完整的类型推…...
多种平台上安装部署调试Open5GS(四)
OpenWRT 源码安装 UERANSIM 安装依赖openwrt源码安装cmake其他依赖准备UERANSIM安装测试验证Open5GS 是一个功能完善的开源5G项目,具备5G、4G核心网功能,最新代码支持R17标准, 本系列文章介绍Open5GS在x86、ARM平台上的安装部署方法,并通过搭建UERANSIN、商用5G基站和终端两…...
KST-3D01型胎儿超声仿真体模、吸声材料以及超声骨密度仪用定量试件介绍
一、KST-3D01型胎儿超声仿真体模 KST—3D01型胎儿超声体模,采用仿羊水环境中内置胎龄为7个月大仿胎儿设计。用于超声影像系统3D扫描演示装置表面轮廓呈现和3D重建。仿羊水超声影像呈暗回声(无回波)特性,仿胎儿超声影像呈对比明显…...
论文笔记-WWW2024-ClickPrompt
论文笔记-WWW2024-ClickPrompt: CTR Models are Strong Prompt Generators for Adapting Language Models to CTR Prediction ClickPrompt: CTR模型是大模型适配CTR预测任务的强大提示生成器摘要1.引言2.预备知识2.1传统CTR预测2.2基于PLM的CTR预测 3.方法3.1概述3.2模态转换3.…...
VTK中对于相机camera的设置
1. 相机的核心属性 在 VTK 中,vtkCamera 的核心属性有默认值。如果你不设置这些属性,相机会使用默认值来渲染场景。 Position(默认值:(0, 0, 1)): 默认情况下,相机位于 Z 轴正方向的 (0, 0, 1)…...
小程序解决大问题-物流系统磁盘爆满问题处理
晚上七点,煤矿调运的物流调度系统突然磁盘报名导致服务崩溃。系统用的是微服务,没有详细操作说明,也不敢动,运煤车辆排起了长队,只能联系厂家处理。好在经过30多分钟的处理,服务终于启动,系统运…...
OGRE 3D----5. OGRE和QML事件交互
在现代图形应用程序开发中,OGRE(Object-Oriented Graphics Rendering Engine)作为一个高性能的3D渲染引擎,广泛应用于游戏开发、虚拟现实和仿真等领域。而QML(Qt Modeling Language)则是Qt框架中的一种声明式语言,专注于设计用户界面。将OGRE与QML结合,可以充分利用OGR…...
docker搭建nginx
一. 直接启动nginx镜像 1. 下载nginx镜像 docker pull nginx 2. 运行镜像 docker run -p 8080:80 --name web -d nginx 3. 网址查看 xx.xx.xx.xx:8080 二. 挂在文件启动nginx镜像 1. 拷贝docker文件到本地 docker cp web:/etc/nginx/nginx.conf /root/data/config/nginx…...
Qt之样式表设置总结。。。持续更新
参考文章链接如下: Qt样式表之一:Qt样式表和盒子模型介绍 Qt样式表之二:QSS语法及常用样式 Qt样式表之三:实现按钮三态效果的三种方法 Qt样式表之一:QSS名词解释 Qt样式表之二:常用控件qss Qt样式表之三:QSS奇技淫巧 样式表介绍 Qt样式表是一个可以自定义部件外观的十…...
若依项目源码阅读
源码阅读 前端代码分析 代码生成器生成的前端代码有两个,分别是course.js用于向后端发送ajax请求的接口代码,另一个是index.vue,用于在浏览器展示课程管理的视图组件。前端的代码是基于vue3elementplus。 template用于展示前端组件别的标签…...
Ubuntu20.04运行R-VIO2
目录 1.环境配置2.构建项目3. 运行 VIO 模式4.结果图 1.环境配置 CMakeLists.txt中 C 使用 14、opencv使用4 2.构建项目 克隆代码库: 在终端中执行以下命令克隆项目:git clone https://github.com/rpng/R-VIO2.git编译项目: 使用 catkin_m…...
【Python运维】容器管理新手入门:使用Python的docker-py库实现Docker容器管理与监控
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着容器技术的广泛应用,Docker已经成为开发和运维中的标准工具之一。使用Python语言管理Docker容器,不仅可以自动化繁琐的容器操作,还能…...
SQL基础入门——SQL基础语法
1. 数据库、表、列的创建与管理 在SQL中,数据库是一个数据的集合,包含了多个表、视图、索引、存储过程等对象。每个表由若干列(字段)组成,表中的数据行代表记录。管理数据库和表的结构是SQL的基础操作。 1.1 创建数据…...
Lumos学习王佩丰Excel第十八讲:LOOKUP函数与数组
一、回顾统计函数 1、使用SUMIF函数 sumif(条件区域,求和条件,求和区域) 2、使用SUMIFS函数 SUMIFS(求和范围, 条件范围1, 条件1, 条件范围2, 条件2, ...) 二、认识数组 1、数组生成原理 所谓数组,是有序的元素序列。组成数组的各个变量称为数组的元素。对于Ex…...
第二节——计算机网络(四)物理层
车载以太网采用差分双绞线车载以太网并未指定特定的连接器,连接方式更为灵活小巧,能够大大减轻线束重量。传统以太网一般使用RJ45连接器连接。车载以太网物理层需满足车载环境下更为严格的EMC要求,100BASE-T1\1000BASE-T1对于非屏蔽双绞线的传…...
【接口封装】——11、Qt 的单例模式
宏定义: Q_GLOBAL_STATIC(NotifyManager,theInstance) 函数定义: class NotifyManager : public QObject {Q_OBJECTpublic:NotifyManager(QObject *parent nullptr);~NotifyManager();static NotifyManager*getInstance(); //单例模式 } 源代码&#…...
理解字母形状,从而获得含义
英文字母,都是象形符号,所以,理解其形象,所象之形,是一项重要的工作,和非常有意义事情。也是我们快速记住大量单词,将单词从底层逻辑开始理清,融会贯通扩展记忆容量的重要办法之一。…...
redis揭秘-redis01-redis单例与集群安装总结
文章目录 【README】【1】安装单机【1.1】安装环境【1.2】安装步骤 【2】redis集群主从模式配置【2.1】集群架构【2.2】redis集群主从模式搭建步骤【2.3】redis集群主从模式的问题(单点故障问题) 【3】redis集群哨兵模式配置【3.1】集群架构【3.2】redis…...
mini-spring源码分析
IOC模块 关键解释 beanFactory:beanFactory是一个hashMap, key为beanName, Value为 beanDefination beanDefination: BeanDefinitionRegistry,BeanDefinition注册表接口,定义注册BeanDefinition的方法 beanReference:增加Bean…...
RVO动态避障技术方案介绍
原文:RVO动态避障技术方案介绍 - 哔哩哔哩 我们在开发游戏的时候经常会遇到这样的问题,当我们寻路的时候,其它人也在寻路,如何避免不从其它人的位置穿过。这个叫做动态避障,目前主流的解决方案就是RVO。本节我们来介绍…...
HTML CSS JS基础考试题与答案
一、选择题(2分/题) 1.下面标签中,用来显示段落的标签是( d )。 A、<h1> B、<br /> C、<img /> D、<p> 2. 网页中的图片文件位于html文件的下一级文件夹img中,…...
【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现
代码主要实现了以下功能: 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode,包含节点数据值(字符类型)以及指向左右子树的指针。 定义了顺序栈结构体 SqStack,用于存储二叉树节点指针,实现非递归遍历…...
MySQL Workbench 数据库建模详解:从设计到实践
目录 数据库建模基础概念MySQL Workbench 简介与安装 什么是 MySQL Workbench?安装与环境配置 MySQL Workbench 数据库建模功能详解 EER 图(实体关系图)数据库反向工程数据库正向工程模型同步与版本管理 MySQL Workbench 数据库建模实战教程…...
【字体】Fire Code连字效果开启
Vscode 开启方法 1、设置字体Fire Code 放在最前面的即可: 2、启用连字 继续往下找到“在 settings.json 中编辑”,然后设置"editor.fontLigatures": true : 保存即可。 Sublime 开启方法 设置中设置字体后,启…...
springboot kafka在kafka server AUTH变动后consumer自动销毁
前言 笔者使用了kafka用来传输数据,笔者在今年10月写了文章,怎么使用配置化实现kafka的装载:springboot kafka多数据源,通过配置动态加载发送者和消费者-CSDN博客 不过在实际运行中,kafka broker是加密的,…...
第六届国际科技创新(IAECST 2024)暨第四届物流系统与交通运输(LSTT 2024)
重要信息 会议官网:www.lstt.org 大会时间:2024年12月6-8日 大会地点:中国-广州 简介 第六届国际科技创新暨第四届物流系统与交通运输国际(LSTT 2024)将于2024年12月6-8日在广州举办,这是一个集中探讨…...
【Vue3】【Naive UI】< a >标签
【Vue3】【Naive UI】< a >标签 超链接及相关属性其他属性 【VUE3】【Naive UI】<NCard> 标签 【VUE3】【Naive UI】<n-button> 标签 【VUE3】【Naive UI】<a> 标签 <a> 标签HTML中的一个锚&…...
Fortran mpi在Linux的安装
最近编译一个程序需要需要 Fortran mpi 编译器,则需要安装 Fortran编辑器和MPI库,以下是具体的安装步骤: 一、安装 Fortran 编译器(gfortran) 在conda环境中安装: conda install -c conda-forge gfortra…...
蓝桥-希尔排序模板题
第一眼看到这个题还在想希尔排序模板不记得了,于是去网上了搜了一个,但是考虑到这种题只看测试点能不能通过,于是用Arrays方法试了一下,发现也可以。 1.希尔排序模板ac代码 package yunkePra;import java.util.Scanner;public cl…...
深入学习指针(5)!!!!!!!!!!!!!!!
文章目录 1.回调函数是什么?2.qsort使用举例2.1使用qsort函数排序整形数据2.2使用sqort排序结构数据 3.qsort函数的模拟实现 1.回调函数是什么? 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递…...
windows 应用 UI 自动化实战
UI 自动化技术架构选型 UI 自动化是软件测试过程中的重要一环,网络上也有很多 UI 自动化相关的知识或资料,具体到 windows 端的 UI 自动化,我们需要从以下几个方面考虑: 开发语言 毋庸置疑,在 UI 自动化测试领域&am…...