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

c++流对象

核心概念回顾:

C++ 的流库 (<iostream>, <fstream>, <sstream>) 提供了一种统一的方式来处理输入和输出,无论数据是来自键盘、文件还是内存中的字符串。它们都基于 std::istream (输入流基类) 和 std::ostream (输出流基类),共享许多共同的接口和行为。


一、 标准流对象 (<iostream>)

这些是 C++ 标准库预先创建好的全局流对象,用于与标准输入/输出设备交互。

  • 包含头文件: <iostream>
  • 主要对象:
    • std::cin: 标准输入流(通常是键盘)。
    • std::cout: 标准输出流(通常是屏幕)。
    • std::cerr: 标准错误输出流(通常是屏幕,无缓冲)。
    • std::clog: 标准错误输出流(通常是屏幕,有缓冲)。

1. 用法总结:

  • 输入 (std::cin):

    • 使用提取操作符 >> 从标准输入读取数据。
    • >> 会根据变量类型自动解析输入,并自动跳过前面的空白字符(空格、制表符、换行符)。
    • 可以链式使用 >> 读取多个值:std::cin >> var1 >> var2;
    • 使用 std::getline(std::cin, string_var) 来读取包括空白字符在内的整行文本,直到遇到换行符。
    • 核心模式:if 条件中使用 std::cin 对象本身来检查读取是否成功:if (std::cin >> variable)
  • 输出 (std::cout, std::cerr, std::clog):

    • 使用插入操作符 << 将数据发送到标准输出或标准错误输出。
    • << 会根据数据类型自动格式化输出。
    • 可以链式使用 << 输出多个值:std::cout << data1 << data2;
    • 使用 std::endl 可以输出一个换行符并立即刷新(flush)缓冲区,确保内容立即显示。
    • 使用 '\n' 只输出换行符,通常效率比 std::endl 高(不强制刷新),刷新会延迟到缓冲区满或显式刷新时。
    • 可以使用 <iomanip> 中的操纵符进行更复杂的格式化(如设置精度、宽度、填充字符等)。

2. 使用技巧:

  • 检查输入状态: 务必在每次输入操作后检查流的状态,特别是使用 >> 时。if (std::cin >> variable) 是处理潜在输入错误(如输入了非数字字符给整型变量)的标准方式。
    • 如果输入失败,流会进入失败状态 (failbitbadbit 置位),后续的输入操作将不会执行,直到你调用 std::cin.clear() 清除错误标志。
    • std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 是一个常用的技巧,用于在输入失败或读取部分行后,忽略当前行的剩余内容,以便开始处理下一行输入。需要包含 <limits> 头文件。
  • 混合使用 >>getline: 这是常见的陷阱。>> 操作会读取数据,但会把结尾的换行符留在输入缓冲区里。紧接着调用 getline 时,它会立即读到这个遗留的换行符,导致读取到一个空字符串。解决办法是在 >> 之后、getline 之前,调用 std::cin.ignore() 来清理掉遗留的换行符。
  • 选择 cerr vs clog:
    • std::cerr 是无缓冲的,错误信息会立即显示,适合报告需要用户立即看到的关键错误。
    • std::clog 是有缓冲的,输出可能会延迟,适合记录日志信息,性能可能略好。
  • 刷新输出: 对于 std::coutstd::clog (缓冲流),数据不是一写进去就立即显示。你可以使用 std::endlstd::flush 来强制刷新缓冲区。对于需要确保信息立即出现(例如在程序崩溃前),使用 std::endlstd::flush 是必要的。
  • 格式化技巧: 结合 <iomanip> 头文件中的操纵符,可以控制输出的宽度 (std::setw), 精度 (std::setprecision), 浮点数表示 (std::fixed, std::scientific), 填充字符 (std::setfill), 数字基数 (std::dec, std::hex, std::oct) 等。

二、 字符串流类 (<sstream>)

这些类允许你将一个内存中的 std::string 对象当作输入或输出流来处理,是实现字符串与各种数据类型之间转换的强大工具。

  • 包含头文件: <sstream>
  • 主要类:
    • std::istringstream: 输入字符串流,从字符串读取
    • std::ostringstream: 输出字符串流,向字符串写入
    • std::stringstream: 读/写字符串流,既可以读又可以写同一个字符串。

1. 用法总结:

  • std::istringstream (用于解析/读取字符串):

    • 用一个 std::string 初始化一个 istringstream 对象:std::istringstream iss(my_string);
    • 使用 >> 操作符从 iss 中读取数据,其行为与 std::cin >> 类似(跳过空白、按类型解析)。
    • 使用 std::getline(iss, string_var)iss 中读取整行或以指定分隔符分隔的部分。
    • 同样,可以使用 if (iss >> variable) 检查读取是否成功。
    • 例子:std::istringstream iss("10 20.5 hello"); int i; double d; std::string s; iss >> i >> d >> s; // i=10, d=20.5, s=“hello”
    • 例子:std::istringstream iss("part1,part2,part3"); std::string part; while(std::getline(iss, part, ',')) { ... } // 按逗号分割字符串
  • std::ostringstream (用于构建/写入字符串):

    • 创建一个 ostringstream 对象:std::ostringstream oss;
    • 使用 << 操作符向 oss 中写入数据,其行为与 std::cout << 类似(按类型格式化)。
    • 可以使用 <iomanip> 操纵符进行格式化。
    • 完成写入后,调用 oss.str() 成员函数获取最终构建好的 std::string
    • 例子:std::ostringstream oss; oss << "The answer is: " << 42; std::string result = oss.str(); // result = “The answer is: 42”
  • std::stringstream (用于读写同一个字符串):

    • 可以同时使用 >><< 操作符。
    • 通常用于更复杂的场景,需要在一个字符串中定位、读出部分内容,然后又在同一位置写入新的内容(较少见,且效率不如直接构建新字符串)。
    • 例子:std::stringstream ss("initial text"); ss << "modified "; std::string s = ss.str(); // s = “modified text” (写入从当前位置开始覆盖)

2. 使用技巧:

  • 字符串到数字转换: istringstream 是将字符串转换为数字或其他类型(如 int, double)的常见且安全的方法。
    std::string num_str = "123";
    int number;
    std::istringstream iss(num_str);
    if (iss >> number) {// 转换成功,number = 123
    } else {// 转换失败 (例如 num_str 是 "abc")
    }
    
  • 数字到字符串转换: ostringstream 是将数字或其他类型格式化为字符串的灵活方法。
    double pi = 3.14159;
    std::ostringstream oss;
    oss << std::fixed << std::setprecision(2) << "Pi is approximately: " << pi;
    std::string pi_str = oss.str(); // pi_str = "Pi is approximately: 3.14"
    
    注意:C++11 提供了 std::to_string() 用于简单的数字到字符串转换,C++17 提供了 <charconv> 用于更高效的转换,但 ostringstream 在需要复杂格式化时仍然非常有用。
  • 字符串分割: istringstream 结合 std::getline 是按任意字符分割字符串的常用方法。
    std::string csv_line = "Value1,Value2,Value3";
    std::istringstream iss(csv_line);
    std::string token;
    while (std::getline(iss, token, ',')) { // 以逗号为分隔符std::cout << "Token: " << token << std::endl;
    }
    
  • 重用或清空:
    • ostringstream 对象一旦使用 .str() 获取了字符串,底层缓冲区的内容不会自动清除。如果你想重新使用同一个 ostringstream 对象构建新的字符串,有几种方法:
      • 调用 oss.str(""):将内部字符串设置为空,但保留格式化状态。
      • 创建一个新的 ostringstream 对象:这是最干净的方法,也重置了所有的格式化标志。
    • istringstream 对象读取完毕后,通常需要重新用新的字符串初始化或者创建一个新的对象来处理新的输入。
  • 效率考虑: 对于简单的数字与字符串转换,C++11 的 std::to_string 或 C++17 的 <charconv> 通常比字符串流更高效。然而,对于需要自定义格式化或解析包含多种类型/分隔符的复杂字符串时,字符串流提供了更灵活和易读的解决方案。

好的,我们来加入详细的代码示例,更具体地展示标准流对象 (<iostream>) 和字符串流类 (<sstream>) 的用法和使用技巧。


一、 标准流对象 (<iostream>) - 详细示例

这些对象用于标准的输入/输出,与控制台交互。

核心: std::cin, std::cout, std::cerr, std::clog

#include <iostream> // 包含了 cin, cout, cerr, clog
#include <string>   // 用于 std::string
#include <limits>   // 用于 std::numeric_limits
#include <iomanip>  // 用于格式化操纵符int main() {// --- 1. 基本输入/输出 (>>, <<) ---std::cout << "--- Basic I/O ---" << std::endl; // 使用 cout 输出字符串和 endl (换行并刷新)int age;std::string name;// 使用 >> 读取数据 (自动跳过空白)std::cout << "Enter your first name and age (e.g., Alice 30): ";// 尝试读取名字和年龄if (std::cin >> name >> age) { // 检查流状态:读取是否成功// 如果成功,使用读取到的变量std::cout << "Hello, " << name << "! You are " << age << " years old." << std::endl;} else {// 如果失败 (例如输入了非数字给 age)std::cerr << "Error: Invalid input format!" << std::endl; // 使用 cerr 输出错误信息 (无缓冲)// 使用技巧:清理错误标志并忽略当前行的剩余输入std::cin.clear(); // 清除流的错误标志// 忽略直到换行符(或最大可能的字符数)的所有内容,丢弃错误输入std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');}std::cout << std::endl; // 输出空行// --- 2. 读取整行 (getline) ---std::cout << "--- Reading Full Line ---" << std::endl;std::string full_line;std::cout << "Enter a sentence: ";// 使用技巧:处理 >> 留下的换行符// 如果上面的 >> 操作成功,它会留下一个换行符在缓冲区,// 紧接着的 getline 会立刻读到这个换行符并得到一个空行。// 所以这里需要先忽略掉那个遗留的换行符。// 注意:如果上面的 >> 失败,ignore 调用在 clear() 之后,也无害。std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');// 使用 getline 读取整行,包括空格if (std::getline(std::cin, full_line)) { // 检查流状态:读取是否成功std::cout << "You entered line: \"" << full_line << "\"" << std::endl;} else {std::cerr << "Error reading sentence." << std::endl;// getline 失败通常是遇到 EOF 或其他严重的流错误}std::cout << std::endl;// --- 3. 输出到 cerr vs clog ---std::cout << "--- cerr vs clog ---" << std::endl;// cerr 无缓冲,信息会立即显示std::cerr << "This error message should appear immediately (cerr)." << std::endl;// clog 有缓冲,信息可能会延迟显示,直到缓冲区满或程序结束std::clog << "This log message might be buffered (clog)." << std::endl;std::cout << "Check if cerr message appeared before clog message." << std::endl;std::cout << std::endl;// --- 4. 输出格式化 (<iomanip>) ---std::cout << "--- Output Formatting ---" << std::endl;double price = 123.4567;int count = 7;// 设置浮点数精度和固定小数点表示std::cout << std::fixed << std::setprecision(2); // 设置小数点后两位,固定格式std::cout << "Price: $" << price << std::endl; // 输出: Price: $123.46// 设置输出宽度和填充字符std::cout << "Count: ";std::cout << std::setw(5) << std::setfill('0') << count << std::endl; // 输出: Count: 00007 (总宽度5,用'0'填充左边)// 重置填充字符std::cout << std::setfill(' '); // 恢复默认填充字符为空格std::cout << "Default fill: " << std::setw(5) << count << std::endl; // 输出: Default fill:     7// 输出布尔值 (默认是 0 或 1)bool flag = true;std::cout << "Bool (default): " << flag << std::endl; // 输出: Bool (default): 1std::cout << std::boolalpha << "Bool (alpha): " << flag << std::endl; // 输出: Bool (alpha): truestd::cout << std::noboolalpha; // 恢复默认std::cout << std::endl;return 0;
}

std::numeric_limits<std::streamsize>::max() 解释: 这是一个来自 <limits> 头文件的标准常量,表示 streamsize 类型(流用来表示大小或偏移量的类型)的最大可能值。在 ignore() 中用作忽略字符数的上限,配合一个停止字符(如 '\n'),意味着“忽略直到遇到换行符为止的所有字符,但最多不超过 streamsize 的最大值”。这是一种安全的清空缓冲区直到指定字符的方式。


二、 字符串流类 (<sstream>) - 详细示例

这些类用于在内存中的 std::string 和其他数据类型之间进行转换和处理。

核心: std::istringstream, std::ostringstream, std::stringstream

#include <iostream>
#include <string>
#include <sstream> // 用于字符串流类
#include <iomanip> // 用于格式化操纵符 (如 std::fixed, std::setprecision)
#include <vector>  // 用于存储分割后的部分int main() {// --- 1. istringstream - 从字符串读取/解析 ---std::cout << "--- istringstream (Parsing) ---" << std::endl;std::string data = "Item: Laptop Price: 1200.50 Quantity: 3 InStock: true";std::istringstream iss(data); // 用字符串初始化一个输入字符串流std::string item_label, item_name, price_label, stock_label;double price;std::string quantity_label; // 注意这里用string读取,因为后面是数字int quantity;bool in_stock; // 注意:>> 可以直接读取 boolalpha 格式的 true/false// 使用 >> 从字符串流中读取数据// istringstream 的 >> 行为与 cin >> 相同,会跳过空白// 检查流状态是重要的,即使是从字符串读取if (iss >> item_label >> item_name>> price_label >> price>> quantity_label >> quantity) // 链式读取并检查是否成功{// 为了读取 bool,我们需要设置流的格式化标志iss >> std::boolalpha >> stock_label >> in_stock; // 继续读取,并检查 boolalpha// 再次检查整体读取是否成功 (如果bool读取失败,iss.fail()会返回true)if (iss.good() || iss.eof()) { // good() 表示没有错误标志,eof() 表示已读到末尾std::cout << "Successfully parsed data:" << std::endl;std::cout << item_label << " " << item_name << std::endl;std::cout << price_label << " " << price << std::endl;std::cout << quantity_label << " " << quantity << std::endl;std::cout << stock_label << " " << std::boolalpha << in_stock << std::endl; // 打印 bool 时也用 boolalpha} else {std::cerr << "Partial parsing successful, but remaining data read failed." << std::endl;}} else {std::cerr << "Error parsing the initial data." << std::endl;// 可以检查 iss.fail() 或 iss.bad() 来确定失败原因}std::cout << std::endl;// 使用技巧:字符串分割 (结合 getline)std::cout << "--- String Splitting (istringstream + getline) ---" << std::endl;std::string csv_line = "apple,banana,orange,grape";std::istringstream csv_iss(csv_line); // 创建一个新的 istringstreamstd::string token;std::vector<std::string> tokens;// 使用 getline 结合指定分隔符 ',' 来从字符串流中读取while (std::getline(csv_iss, token, ',')) { // getline 返回流本身,在 while 中会自动转换为 booltokens.push_back(token);}std::cout << "Original string: \"" << csv_line << "\"" << std::endl;std::cout << "Tokens found:" << std::endl;for (const auto& t : tokens) {std::cout << "- " << t << std::endl;}std::cout << std::endl;// --- 2. ostringstream - 向字符串构建/写入 ---std::cout << "--- ostringstream (Building) ---" << std::endl;std::ostringstream oss; // 创建一个输出字符串流对象std::string product = "Gadget";int quantity_ordered = 10;double unit_cost = 25.99;// 使用 << 向字符串流写入数据,可以像 cout 一样使用格式化oss << "Order Details:\n";oss << "Product: " << product << "\n";oss << "Quantity: " << quantity_ordered << "\n";oss << std::fixed << std::setprecision(2); // 设置浮点数格式oss << "Unit Cost: $" << unit_cost << "\n";oss << "Total Cost: $" << (quantity_ordered * unit_cost);// 获取构建好的字符串std::string order_summary = oss.str();std::cout << "Built String:\n" << order_summary << std::endl;std::cout << std::endl;// 使用技巧:重用 ostringstream (清空缓冲区)std::cout << "--- Reusing ostringstream ---" << std::endl;// oss 已经用过了,现在清空它来构建一个新的字符串oss.str(""); // 设置内部字符串为空,重置流的位置到开始oss.clear(); // 清除所有错误标志 (如果之前有错误的话)// 现在 oss 是空的,可以重新向它写入oss << "This is a new message: " << 456;std::string new_message = oss.str();std::cout << "Reused and built: " << new_message << std::endl;std::cout << std::endl;// --- 3. stringstream - 读写同一个字符串 (较少用,但示例) ---std::cout << "--- stringstream (Read/Write) ---" << std::endl;std::stringstream ss("123 Some Text 456");int num1;std::string text_part;int num2;// 从字符串流中读取ss >> num1 >> text_part >> num2;std::cout << "Read num1: " << num1 << ", text_part: '" << text_part << "', num2: " << num2 << std::endl;// 当前流的位置在 456 之后// 清空流状态,并设置新的内部字符串(这其实更像 istringstream/ostringstream 的组合用法)ss.str("Different Data"); // 改变内部字符串ss.clear(); // 清除 EOF 标志或其他错误标志std::string new_data;ss >> new_data;std::cout << "After changing string and clearing state, read: '" << new_data << "'" << std::endl;return 0;
}

相关文章:

c++流对象

核心概念回顾&#xff1a; C 的流库 (<iostream>, <fstream>, <sstream>) 提供了一种统一的方式来处理输入和输出&#xff0c;无论数据是来自键盘、文件还是内存中的字符串。它们都基于 std::istream (输入流基类) 和 std::ostream (输出流基类)&#xff0c…...

华为IP(5)

交换机的堆叠与集群 堆叠和集群指的是同一件事 前言: 随着企业的发展&#xff0c;企业网络的规模越来越大&#xff0c;这对企业网络提出了更高的要求&#xff1a;更高的可靠性、更低的故障恢复时间、设备更加易于管理等。 传统的园区网高可靠性技术出现故障时很难做到毫秒级…...

零信任架构下的等保 2.0 与密评密改双合规

随着《网络安全等级保护2.0》和《商用密码应用安全性评估》的深入实施&#xff0c;企业面临双重合规压力&#xff1a;既要满足等保2.0对“主动防御”和“动态防护”的要求&#xff0c;又要通过密评密改强化密码技术的合规性。传统安全架构依赖边界防护和静态密码策略&#xff0…...

华为 MRAG:多模态检索增强生成技术论文阅读

GitHub项目链接&#xff1a;https://github.com/PanguIR/MRAGSurvey 总览 多模态检索增强生成&#xff08;MRAG&#xff09;通过将文本、图像、视频等多模态数据整合到检索与生成过程中&#xff0c;显著提升了多模态大语言模型&#xff08;MLLM&#xff09;的性能。传统检索增…...

文字光影扫过动效

列子1 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>光影扫过文字动效</title><styl…...

SpringBoot配置RestTemplate并理解单例模式详解

在日常开发中&#xff0c;RestTemplate 是一个非常常用的工具&#xff0c;用来发起HTTP请求。今天我们通过一个小例子&#xff0c;不仅学习如何在SpringBoot中配置RestTemplate&#xff0c;还会深入理解单例模式在Spring中的实际应用。 1. 示例代码 我们首先来看一个基础的配置…...

计算机网络应用层(5)-- P2P文件分发视频流和内容分发网

&#x1f493;个人主页&#xff1a;mooridy &#x1f493;专栏地址&#xff1a;《计算机网络&#xff1a;自顶向下方法》 大纲式阅读笔记_mooridy的博客-CSDN博客 &#x1f493;本博客内容为《计算机网络&#xff1a;自顶向下方法》第二章应用层第五、六节知识梳理 关注我&…...

C++ TCP通信原理与实现

C 中 TCP 通信的原理基于 TCP/IP 协议栈的实现&#xff0c;以下是核心原理和关键步骤的详细说明&#xff1a; 一、TCP 通信核心原理 面向连接 通信双方需通过 三次握手 建立可靠连接&#xff0c;确保通信通道稳定。通过 四次挥手 断开连接&#xff0c;保证数据完整性。 可靠传…...

计算机网络-运输层(1)

计算机网络-运输层(1) 文章目录 计算机网络-运输层(1)5.1 运输层概述5.2 运输层端口号、复用与分用端口号基本概念端口号特性端口号分类重要说明 5.3 UDP与TCP协议对比关键区别说明 5.1 运输层概述 计算机网络体系结构中的物理层、数据链路层以及网络层共同解决了主机通过异构…...

学习spark-streaming收获

1.流处理的核心概念 •实时 vs微批处理&#xff1a;理解了 Spark Streaming 的微批处理&#xff08;Micro-Batch&#xff09;模型&#xff0c;将流数据切分为小批次&#xff08;如1秒间隔&#xff09;进行处理&#xff0c;与真正的流处理&#xff08;如Flink&#xff09;的区…...

蓝桥杯 14. 奇怪的数列

奇怪的数列 原题目链接 题目描述 从 X 星截获一份电码&#xff0c;是一些数字&#xff0c;如下&#xff1a; 13 1113 3113 132113 1113122113 ⋯⋯YY 博士经彻夜研究&#xff0c;发现了规律&#xff1a; 第一行的数字随便是什么&#xff0c;以后每一行都是对上一行 “读出…...

前端高频面试题day2

如何在vue3中使用defineAsyncComponent实现异步组件加载 在 Vue 3 中&#xff0c;使用 defineAsyncComponent 实现异步组件加载的步骤如下&#xff1a; 引入方法&#xff1a;从 Vue 中导入 defineAsyncComponent。定义异步组件&#xff1a;通过 defineAsyncComponent 包装一个…...

Linux系统之设置开机启动运行桌面环境

Linux 开机运行级别介绍与 Ubuntu 桌面环境配置指南 一、Linux 开机运行级别(Runlevel) 在传统的 Linux 系统(如 SysV init 初始化系统)中,运行级别定义了系统启动时加载的服务和资源。常见的运行级别如下: 运行级别模式用途0Halt(停机模式)关闭系统1Single User Mode…...

Python PyAutoGUI库【GUI 自动化库】深度解析与实战指南

一、核心工作原理 底层驱动机制&#xff1a; 通过操作系统原生API模拟输入使用ctypes库调用Windows API/Mac Cocoa/Xlib屏幕操作依赖Pillow库进行图像处理 事件模拟流程&#xff1a; #mermaid-svg-1CGDRNzFNEffhvSa {font-family:"trebuchet ms",verdana,arial,sans…...

【MobaXterm】win10下载v25.1安装流程

【下载地址】 官网&#xff1a; https://mobaxterm.mobatek.net/ 下载安装版&#xff0c;解压使用更快一些 【v20.0中文安装包】 夸克网盘&#xff1a;https://pan.quark.cn/s/2ad5b59e6d8e#/list/share 对应的指导教程&#xff1a; MobaXterm中文版安装使用教程-附安装包…...

2025.4.22 JavaScript 常用事件学习笔记

一、事件概述 JavaScript 事件是指在用户与网页交互或网页状态发生变化时所触发的操作。通过使用事件&#xff0c;可以为网页添加丰富的动态功能&#xff0c;实现用户与页面之间的互动&#xff0c;让网页不再只是静态的展示内容。 二、常见鼠标事件 click 事件 简介 &#xf…...

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现

Android 13.0 MTK Camera2 设置默认拍照尺寸功能实现 文章目录 需求&#xff1a;参考资料架构图了解Camera相关专栏零散知识了解部分相机源码参考&#xff0c;学习API使用&#xff0c;梳理流程&#xff0c;偏应用层Camera2 系统相关 修改文件-修改方案修改文件&#xff1a;修改…...

Linux:基础IO 文件系统

Linux:基础IO && 文件系统 一、系统IO&#xff08;一&#xff09;系统文件操作接口1、open2、write3、read &#xff08;二&#xff09;文件描述符1、概念2、标准输入、标准输出、标准错误 &#xff08;三&#xff09;dup系统调用&#xff08;重定向原理&#xff09; 二…...

近期有哪些断链危机?如何提升供应链风险管理能力?

全球供应链格局正经历深刻变革&#xff0c;其网络架构愈发复杂&#xff0c;涉及多国企业主体且涵盖多个节点与复杂环节&#xff0c;管理难度显著增大。从原材料采购到终端交付&#xff0c;运输、仓储、加工等任一环节均存在潜在风险&#xff0c;单一环节效率滞后易引发系统性连…...

知识科普|褪黑素的发展历程及应用研究进展

睡眠作为维持人体健康的重要生理机制&#xff0c;其节律性受到精密调控。在昼夜节律系统的调控下&#xff0c;人类普遍遵循周期性单次睡眠模式&#xff0c;这一过程涉及复杂的神经-体液调控网络。其中神经元活动、神经递质传导、激素分泌及遗传调控机制共同作用于睡眠觉醒系统&…...

企业如何构建一个全面的Web安全防护体系

企业如何构建一个全面的Web安全防护体系 企业构建全面的Web安全防护体系需融合战略规划、技术防御、持续运营和风险治理四大维度&#xff0c;以下是基于行业最佳实践的系统化方案&#xff1a; 一、顶层设计&#xff1a;治理架构与安全战略 战略规划与合规驱动 制定网络安全愿…...

T8332FN凯钰LED驱动芯片多拓扑车规级AEC-Q100

T8332FN是一款支持多拓扑结构的恒流LED驱动控制芯片&#xff0c;适用于汽车照明及高功率LED应用&#xff0c;具备宽电压输入、高精度调光及多重保护功能。 核心特性 - 输入与拓扑&#xff1a;支持5-60V宽电压输入&#xff0c;适配Boost、Buck、Buck-Boost、SEPIC四种拓扑结构&…...

Redis一些小记录

Redis一些小记录 SpringData Redis&#xff1a;RedisTemplate配置与数据操作 操作String类型数据 String是Redis中最基本的数据类型&#xff0c;可以存储字符串、整数或浮点数。RedisTemplate提供了ValueOperations接口来操作String类型的数据&#xff0c;支持设置值、获取值、…...

Win10安装 P104-100 驱动

安装完之后总结一下, 之前做了不少功课, 在网上搜了很多教程, 视频的文字的, 但是很多已经比较陈旧了. 最后发现的这个 GitHub 项目 NVIDIA-patcher 是最有用的, 因为这是现在这些魔改驱动的来源. NVIDIA-patcher 仓库地址: https://github.com/dartraiden/NVIDIA-patcher 安…...

Android开机动画资源包制作(测试使用)

开机动画资源包需要采用仅存储的方式进行压缩&#xff0c;不能使用压缩软件直接压缩生成。 如果是系统开发人员&#xff0c;可以在源码目录中&#xff0c;采用bootanim程序提供的制作方式进行&#xff0c;下面可供测试人员自行制作。 制作流程 1&#xff09;基于设备中已有开…...

PWN基础-利用格式化字符串漏洞泄露canary结合栈溢出getshell

测试源码&#xff1a; #include<stdio.h> void exploit() {system("/bin/sh"); } void func() {char str[0x20];read(0, str, 0x50);printf(str);read(0, str, 0x50); } int main() {func();return 0; } 编译&#xff0c;开启 canary 保护&#xff0c;关闭 p…...

Kafka HA集群配置搭建与SpringBoot使用示例总结

Kafka HA集群配置搭建与SpringBoot使用示例总结 一、Kafka高可用(HA)集群搭建 1. 环境准备 至少3台服务器&#xff08;推荐奇数台&#xff0c;如3、5、7&#xff09;已安装Java环境&#xff08;JDK 1.8&#xff09;下载Kafka二进制包&#xff08;如kafka_2.13-3.2.1.tgz&…...

MSO-Player:基于vlc的Unity直播流播放器,支持主流RTSP、RTMP、HTTP等常见格式

MSO-Player 基于libVLC的Unity视频播放解决方案 支持2D视频和360度全景视频播放的Unity插件 &#x1f4d1; 目录 &#x1f3a5; MSO-Player &#x1f4cb; 功能概述&#x1f680; 快速入门&#x1f4da; 关键组件&#x1f4dd; 使用案例&#x1f50c; 依赖项&#x1f4cb; 注意…...

97A6-ASEMI无人机专用功率器件97A6

编辑&#xff1a;ll 97A6-ASEMI无人机专用功率器件97A6 型号&#xff1a;97A6 品牌&#xff1a;ASEMI 封装&#xff1a;SOT-23 批号&#xff1a;最新 引脚数量&#xff1a;3 特性&#xff1a;双向可控硅 工作温度&#xff1a;-40℃~150℃ ‌97A6双向可控硅&#xff1a…...

body Param Query 三个 不同的入参 分别是什么意思 在前端 要怎么传 这三种不同的参数

在 NestJS 中&#xff0c;Body()、Param() 和 Query() 用于处理不同类型的请求参数。以下是它们的含义及前端传递方式&#xff1a; Body()&#xff1a;请求体参数 • 含义&#xff1a;用于获取请求体中的数据&#xff08;如 POST/PUT 请求中提交的 JSON、表单数据等&#xff09…...

生成式人工智能认证(GAI认证)含金量怎么样?

当生成式人工智能(Generative AI)的浪潮以摧枯拉朽之势重塑职业版图时,一个尖锐的问题正悬在无数人的心头:在技术迭代比眨眼更快的时代,如何证明自己具备驾驭AI的核心能力? 这场认知革命的背后,一张认证证书的价值早已超越了纸面——它既是个人能力的“信用背书”,也是…...

环境DNA宏条形码技术,鱼类检测引物如何选择?

环境DNA&#xff08;eDNA&#xff09;宏条形码技术在鱼类多样性调查研究中的优势明显&#xff0c;相比于传统调查方式&#xff0c;eDNA宏条形码技术灵敏度更高&#xff0c;能够更好地揭示鱼类的丰富度&#xff0c;并且具有高时效性。然而&#xff0c;在使用这个技术的过程中&am…...

Scala集合操作与WordCount案例实战总结

集合计算简单函数 1、说明 &#xff08;1&#xff09;求和 &#xff08;2&#xff09;求乘积 &#xff08;3&#xff09;最大值 &#xff08;4&#xff09;最小值 &#xff08;5&#xff09;排序 2、案例实操 object demo29{ def main(args: Array[String]): Unit { val…...

Spark-Streaming核心编程(四)总结

有状态转化操作 - UpdateStateByKey ‌功能描述‌ UpdateStateByKey原语用于在DStream中跨批次维护状态&#xff0c;例如流计算中的累加wordcount。 它允许对一个状态变量进行访问和更新&#xff0c;适用于键值对形式的DStream。 ‌工作原理‌ 给定一个由(键&#xff0c;事…...

关系型数据库PostgreSQL for Mac 保姆级使用教程

第一部分&#xff1a;安装PostgreSQL 方法一&#xff1a;使用Postgres.app&#xff08;最简单&#xff09; 访问 Postgres.app官网 下载最新版本&#xff0c;将 Postgres.app 移动到 “Applications” 文件夹。 双击Postgres.app打开应用&#xff0c;点击"Initialize&q…...

新增 29 个专业,科技成为关键赛道!

近日&#xff0c;教育部正式发布《普通高等学校本科专业目录&#xff08;2025年&#xff09;》&#xff0c;新增 29 个本科专业&#xff0c;包括区域国别学、碳中和科学与工程、海洋科学与技术、健康与医疗保障、智能分子工程、医疗器械与装备工程、时空信息工程、国际邮轮管理…...

云计算市场的重新分类研究

云计算市场传统分类方式&#xff0c;比如按服务类型分为IaaS、PaaS、SaaS&#xff0c;或者按部署模式分为公有云、私有云、混合云。主要提供计算资源、存储和网络等基础设施。 但随着AI大模型的出现&#xff0c;云计算市场可以分为计算云和智算云&#xff0c;智算云主要是AI模…...

大模型时代的具身智能:从虚拟到现实的智能体进化革命

一、具身智能&#xff1a;重新定义 AI 与物理世界的交互范式 &#xff08;一&#xff09;概念解析&#xff1a;从 "离身" 到 "具身" 的认知革命 具身智能&#xff08;Embodied AI&#xff09;是融合大模型决策能力与物理实体执行能力的新型智能系统&…...

鸿蒙NEXT开发正则工具类(ArkTs)

import { FormatUtil } from ./FormatUtil;/*** 正则工具类* author CSDN-鸿蒙布道师* since 2025/04/27*/ export class RegexUtil {/*** 英文字母、数字和下划线*/static readonly REG_GENERAL "^\\w$";/*** 数字*/static readonly REG_NUMBERS "^\\d$"…...

Flink维表深度解析

一、维表的概念与作用 维表&#xff08;Dimension Table&#xff09; 是数据仓库中的核心概念&#xff0c;通常用于存储静态或缓慢变化的业务实体信息&#xff08;如用户资料、商品信息、地理位置等&#xff09;。在实时流处理场景中&#xff0c;维表的作用是为主数据流&#…...

基于ArcGIS的洪水灾害普查、风险评估及淹没制图技术研究​

一、洪水普查技术规范解读 1.1 全国水旱灾害风险普查实施方案解读 1.2 洪水风险区划及防治区划编制技术要求解读 1.3 山丘区中小河流洪水淹没图编制技术要求解读 二、ArcGIS介绍及数据管理 2.1 ArcGIS界面及数据加载 2.2 ArcGIS常见数据格式 2.3基于Geodatabase的洪水灾…...

初识数据结构——二叉树从基础概念到实践应用

数据结构专栏 ⬅(click) 初识二叉树&#xff1a;从基础概念到实践应用&#x1f333; 一、树型结构基础 1.1 树的基本概念 树是一种非线性的数据结构&#xff0c;由n(n>0)个有限节点组成一个具有层次关系的集合。它看起来像一棵倒挂的树&#xff0c;根朝上而叶朝下。 关键特…...

手搓传染病模型(SEIR)

先看模型 在本模型中&#xff0c;人群有四种自然史状态&#xff1a;易感者(S)&#xff0c;暴露者(E)&#xff0c;感染者(I)以及康复者(R) 2.模型假设人群分布是同质均匀的&#xff0c;未考虑人群出生、死亡、迁入迁出对疾病传播的影响 3.康复者永久免疫&#xff1a;康复者永久免…...

企业数据赋能 | 应用模板分享:汽车销售仪表板

实时监控销售数据&#xff0c;比较车型、地区业绩~ 今天&#xff0c;小编向大家分享 Tableau 应用分析模板&#xff1a;由 Imran Shaikh 搭建的汽车销售仪表板。借助此仪表板&#xff0c;企业可以实时跟踪销售情况&#xff0c;了解市场趋势&#xff0c;并比较不同车型、地区和销…...

C++?动态内存管理!!!

一、引言 之前我们一起讨论了类和对象的相关知识&#xff0c;接下来我们将继续完善我们的知识体系&#xff0c;为以后继续深入学习C知识添砖加瓦&#xff0c;在本期我们将一起学习C中关于动态内存管理的相关知识&#xff0c;在学习之前将要先回顾C语言中是如何进行动态内存管理…...

MCP协议:AI生态的统一标准

MCP(Model Context Protocol,模型上下文协议)是人工智能领域的革命性协议标准,被广泛类比为“AI世界的USB-C接口”。它通过统一模型、算力和数据的交互方式,解决了AI生态中的碎片化问题,重构了智能协作的技术范式。以下是其核心解析与技术哲学: 一、MCP协议的核心定位与…...

在 UniApp 中实现 App 与 H5 页面的跳转及通信

在移动应用开发中&#xff0c;内嵌 H5 页面或与外部网页交互是常见需求。UniApp 作为跨平台框架&#xff0c;提供了灵活的方式实现 App 与 H5 的跳转和双向通信。本文将详细讲解实现方法&#xff0c;并提供可直接复用的代码示例。 文章目录 一、 App 内嵌 H5 页面&#xff08;使…...

目标跟踪最新文章阅读列表

AAAI2025 TrackFormer: Multi-Object Tracking with Transformers 论文:https://arxiv.org/abs/2101.02702 代码:https://github.com/timmeinhardt/trackformer AAAI2025 SUTrack 单目标跟踪 论文:https://pan.baidu.com/s/10cR4tQt3lSH5V2RNf7-3gg?pwd=pks2 代码:htt…...

Spark RDD行动算子与共享变量实战:从数据聚合到分布式通信

RDD行动算子&#xff1a; 行动算子就是会触发action的算子&#xff0c;触发action的含义就是真正的计算数据。 1、reduce import org.apache.spark.{SparkConf, SparkContext} object value11 { def main(args: Array[String]): Unit { // 创建 SparkConf 对象并设置应用…...

《2025全球机器学习技术大会:阿里云讲师张玉明深度剖析通义灵码AI程序员》

4 月 18 日 - 19 日&#xff0c;由 CSDN & Boolan 联合举办的 2025 全球机器学习技术大会&#xff08;ML-Summit&#xff09;于上海顺利举行。大会聚焦人工智能与机器学习前沿技术&#xff0c;汇聚了来自科技与人工智能领域的数位顶尖专家以及数千名开发者和研究者&#xf…...