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

【c++】C++ IO流

本专栏内容为:C++学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C++。

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

io流

  • C语言的输入与输出
  • 流是什么
  • C++IO流
    • C++标准IO流
    • C++文件IO流
      • 文件操作步骤
      • 以二进制的形式操作文件
      • 以文本的形式操作文件
      • 使用>>和<<对文件进行操作
  • stringstream的介绍

C语言的输入与输出

在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf:

scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。
printf: 将指定的数据输出到标准输出设备(屏幕),使用时需要注意宽度输出和精度输出的控制。
C语言借助了相应的缓冲区来进行输入与输出,如下图所示:
在这里插入图片描述
对输入输出缓冲区的理解:

  1. 可以屏蔽掉低级I/O的实现。 低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。
  2. 可以使用这部分的内容实现“行”读取的行为。 对于计算机而言是没有“行”这个概念的,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。

流是什么

“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且有方向性的数据的抽象描述。

C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从计算机内部向外部输出设备(如显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。

流的特性: 有序连续、具有方向性

为了实现这种流动,C++定义了I/O标准类库,当中的每个类都称为流/流类,用以完成某方面的功能。

C++IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类。
在这里插入图片描述

C++标准IO流

C++标准库提供了4个全局流对象(cin、cout、cerr、clog):

使用cout进行标准输出,即数据从内存流向控制台(显示器)。
使用cin进行标准输入,即数据通过键盘输入到程序中。
使用cerr进行标准错误的输出。
使用clog进行日志的输出。
从上图可以看出,cout、cerr、clog都是由ostream类实例化出的三个不同的对象,因此这三个对象基本没什么区别,只是应用场景不同。

注意:
1、在使用cin、cout时必须要包含iostream文件,并引入std标准命名空间。

#include <iostream> //包含iostream文件
using namespace std; //引入std标准命名空间
int main()
{int a = 0;cin >> a;cout << a << endl;return 0;
}

在这里插入图片描述
或是在使用时指定cout和cin所属的命名空间。

#include <iostream> //包含iostream文件
int main()
{int a = 0;std::cin >> a; //使用时指定所属命名空间std::cout << a << std::endl; //使用时指定所属命名空间return 0;
}

在这里插入图片描述
2、cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中提取。如果一次输入过多,则多余的数据会留在缓冲区以供之后提取,如果输入错了,必须在回车之前进行修改,回车键按下就无法进行修改了,只有把输入缓冲区中的数据取完后,才会要求输入新的数据。
例如,对于以下代码,若在第一次输入时便以空格为分隔输入了两个数据,则在下一次需要提取数据的时候就直接从缓冲区进行提取。

#include <iostream>
using namespace std;
int main()
{int a = 0, b = 0;cin >> a; //输入:10 20cout << a << endl;cin >> b; //直接从输入缓冲区提取cout << b << endl;return 0;
}

在这里插入图片描述
3、输入数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state中对应位置(置1),程序继续。

4、空格和回车都可以作为数据之间的分隔符,所以多个数据可以在一行输入,也可以分行输入。但如果是字符型和字符串,则空格无法用cin输入,字符串中也不能有空格,回车符也无法读入。
例如,我们使用cin无法将含空格的字符串"hello world"输入到string对象中。

#include <iostream>
#include <string>
using namespace std;
int main()
{string s;cin >> s;          //输入:"hello world"cout << s << endl; //输出:"hello"return 0;
}

在这里插入图片描述

对于含有空格的字符串,我们需要使用getline函数进行读取,因为getline函数只有遇到’\n’才会停止读取。

#include <iostream>
#include <string>
using namespace std;
int main()
{string s;getline(cin, s);   //输入:"hello world"cout << s << endl; //输出:"hello world"return 0;
}

在这里插入图片描述
5、cin和cout可以直接输入和输出内置类型的数据。因为标准库已经将所有内置类型的输入和输出进行了重载。

“>>” 运算符的重载:
在这里插入图片描述
"<<"运算符重载
在这里插入图片描述
6、对于自定义类型,如果要支持cin和cout的标准输入输出,则需要对<<和>>进行重载。
例如,对于下面简单实现的日期类,在对<<和>>进行重载后就能够支持cin和cout的输入输出了。

#include <iostream>
using namespace std;
class Date
{friend istream& operator>>(istream& in, Date& d);friend ostream& operator<<(ostream& out, const Date& d);
public:Date(int year = 2021, int month = 1, int day = 1):_year(year), _month(month), _day(day){}
private:int _year;int _month;int _day;
};
//对>>进行重载
istream& operator>>(istream& in, Date& d)
{in >> d._year >> d._month >> d._day;return in;
}
//对<<进行重载
ostream& operator<<(ostream& out, const Date& d)
{out << d._year << "-" << d._month << "-" << d._day;return out;
}
int main()
{Date d;cin >> d;          //输入:2024 7 4cout << d << endl; //输出:2024-7-4return 0;
}

在这里插入图片描述

7、在线OJ中的输入和输出。
某些在线OJ题目是有多组测试用例对我们编写的代码进行测试的,对于这种题目,C语言通常采用的解决方式如下:

while (scanf("%d", &a) != EOF)
{//...
}

而在C++当中,我们一般采用的解决方式如下:

while (cin >> a)
{//...
}

C++文件IO流

文件操作步骤

C++根据文件内容的数据格式将文件分为二进制文件和文本文件,采用文件流对象操作文件的一般步骤如下:
1、定义一个文件流对象。
操作文件的类有以下三个:

对应操作场景
ofstream只写
ifstream只读
fstream读+写

2、使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系。
文件常见的打开方式如下

打开方式功能
in以读的方式打开文件
out以写的方式打开文件
binary以二进制方式对文件进行操作
ate输出位置从文件的末尾开始
app以追加的方式对文件进行写入
trunc先将文件内容清空再打开文件

3、使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写。
对文件进行提取和插入操作的常用成员函数:

成员函数功能
put插入一个字符到文件
write插入一段字符到文件
get从文件提取字符
read从文件提取多个字符
tellg获取当前字符在文件当中的位置
seekg设置对文件进行操作的位置
>>运算符重载将数据形象地以“流”的形式进行输入
<<运算符重载将数据形象地以“流”的形式进行输出

4.关闭文件

以二进制的形式操作文件

以二进制的形式对文件进行写入操作:

#include<fstream>
//以二进制的形式对文件进行写入
void WriteBinary()
{ofstream ofile; //定义文件流对象ofile.open("test.bin", ofstream::out | ofstream::binary); //以二进制写入的方式打开test.bin文件char data[] = "2024xiaoxiaounicorn";ofile.write(data, strlen(data)); //将data字符串写入文件ofile.put('!'); //将字符'!'写入文件ofile.close(); //关闭文件
}

以二进制的形式对文件进行读取操作:

//以二进制的形式对文件进行读取
void ReadBinary()
{ifstream ifile; //定义文件流对象ifile.open("test.bin", ofstream::in | ofstream::binary); //以二进制读取的方式打开test.bin文件ifile.seekg(0, ifile.end); //跳转到文件末尾int length = ifile.tellg(); //获取当前字符在文件当中的位置,即文件的字符总数ifile.seekg(0, ifile.beg); //重新回到文件开头char data[100];ifile.read(data, length); //将文件当中的数据全部读取到字符串data当中ifile.close(); //关闭文件
}

以文本的形式操作文件

以文本的形式对文件进行写入操作:

//以文本的形式对文件进行写入
void WriteTxt()
{ofstream ofile; //定义文件流对象ofile.open("test.txt"); //以写入的方式打开test.txt文件char data[] = "2024xiaoxiaounicorn";ofile.write(data, strlen(data)); //将data字符串写入文件ofile.put('!'); //将字符'!'写入文件ofile.close(); //关闭文件
}

以文本的形式对文件进行读取操作:

//以文本的形式对文件进行读取
void ReadTxt()
{ifstream ifile; //定义文件流对象ifile.open("test.txt"); //以读取的方式打开test.txt文件ifile.seekg(0, ifile.end); //跳转到文件末尾int length = ifile.tellg(); //获取当前字符在文件当中的位置,即文件的字符总数ifile.seekg(0, ifile.beg); //重新回到文件开头char data[100];ifile.read(data, length); //将文件当中的数据全部读取到字符串data当中cout << length << endl;cout << data << endl;ifile.close(); //关闭文件
}

注意: 使用ofstream类对象的open函数时,若不指定打开方式,则默认以写的方式打开文件;使用ifstream类对象的open函数时,若不指定打开方式,则默认以读的方式打开文件;使用fstream类对象的open函数时,若不指定打开方式,则默认以写+读的方式打开文件。

使用>>和<<对文件进行操作

使用>>和<<运算符对文件进行读写操作,会变得很简单,也很形象。
对文件进行写入操作:

//对文件进行写入操作
void WriteFile()
{ofstream ofs("data.txt"); //定义文件流对象,并打开文件ofs << "2024xiaoxiaounicorn!"; //字符串“流入”文件ofs.close(); //关闭文件
}

对文件进行读取操作:

//对文件进行读取操作
void ReadFile()
{ifstream ifs("data.txt"); //定义文件流对象,并打开文件char data[100];ifs >> data; //文件数据“流入”字符串dataifs.close(); //关闭文件
}

注意: 可以在定义文件流对象的同时指定将要打开的文件名,以及文件的打开方式。

stringstream的介绍

在C语言中,我们若是想要将一个整型变量的数据转化为字符串格式,有以下两种方法:
1、使用itoa函数进行转化。

int a = 10;
char arr[10];
itoa(a, arr, 10); //将整型的a转化为十进制字符数字存储在字符串arr当中

2、使用sprintf函数进行转化。

int a = 10;
char arr[10];
sprintf(arr, "%d", a); //将整型的a转化为字符串格式存储在字符串arr当中

虽然itoa函数和sprintf函数都能完成转化,但是在两个函数在转化时,都需要先给出保存结果的空间,而空间的大小是不太好界定的,除此之外,转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。

在C++中,我们可以使用stringstream类对象来避开此问题。在程序当中如果想要使用stringstream,必须要包含头文件sstream。在该头文件下,有三个类:

对应操作场景
ostringstream输出操作
istringstream输入操作
stringstream输入操作+输出操作

这里主要介绍stringstream,stringstream主要可以用来:
1、将数值类型数据格式化为字符串。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{int a = 10;string sa;stringstream s;s << a; //将int类型的a放入输入流s >> sa; //从s中抽取前面插入的int类型的值,赋值给string类型(方式一)cout << sa << endl;s.str(""); //将stringstream底层管理的string对象设置为""。s.clear(); //将上次转换状态清空掉//进行下一次转换double b = 3.14;s << b;sa = s.str(); //获取stringstream中管理的string类型(方式二)cout << sa << endl;return 0;
}

在这里插入图片描述
2、字符串拼接。

#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
{string rets;stringstream s;s << "2024" << "xiaoxiaounicorn"; //将多个字符串放入stringstream中s >> rets; //方式一获取cout << rets << endl;s.str(""); //将stringstream底层管理的string对象设置为空字符串s.clear(); //将上次转换状态清空掉s << "Thanks" << " " << "for" << " " << "reading"; //将多个字符串放入stringstream中rets = s.str(); //方式二获取cout << rets << endl;return 0;
}

在这里插入图片描述
注意事项:

  1. stringstream实际是在底层维护了一个string类型的对象用来保存结果。
  2. stringstream在转换结尾时(即最后一个转换后),会将其内部状态设置为badbit,因此在下一次转换前必须调用clear将状态重置为goodbit才可以转换,但clear不会将stringstream底层的string对象清空。
  3. 可以使用s.str(“”)的方式将stringstream底层的string对象设置为空字符串,否则多次转换时,会将结果全部累积在底层string对象中。
  4. 获取stringstream转换后的结果有两个方法,一是使用>>运算符之间从流当中提取,二是使用s.str( )获取stringstream底层的string对象。
  5. stringstream使用string类对象代替字符数组,可以避免缓冲区溢出的危险,而且其会对参数类型进行推演,不需要格式化控制,也不会存在格式化失败的风险,因此使用更方便,更安全。

相关文章:

【c++】C++ IO流

本专栏内容为&#xff1a;C学习专栏&#xff0c;分为初阶和进阶两部分。 通过本专栏的深入学习&#xff0c;你可以了解并掌握C。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&…...

解密智慧校园基础数据的学年管理功能

在智慧校园平台中&#xff0c;学年管理模块构成了教育活动有序运行的基石&#xff0c;它精心设计来适应多样化的学术日程&#xff0c;确保学校的各项事务都能在清晰规划的学年框架内顺利推进。这一核心功能不仅关乎时间的界定&#xff0c;更深层次地融入了教育管理的每一个细微…...

Python酷库之旅-第三方库Pandas(009)

目录 一、用法精讲 19、pandas.read_xml函数 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 19-6-1、数据准备 19-6-2、代码示例 19-6-3、结果输出 20、pandas.DataFrame.to_xml函数 20-1、语法 20-2、参数 20-3、功能 20-4、返回值 …...

VPN 的入门介绍

VPN&#xff08;虚拟专用网络&#xff09; 简介 虚拟专用网络&#xff0c;简称虚拟专网&#xff08;VPN&#xff09;&#xff0c;其主要功能是在公用网络上建立专用网络&#xff0c;进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实…...

移动UI: 什么特征会被认为是简洁风格,用案例告诉你

什么是简洁风格&#xff0c;恐怕一百个人有一百个是理解&#xff0c;本文通过理论分析案例的方式进行探讨。 移动 UI 中的简洁风格通常具有以下几个特征&#xff1a; 1. 平面化设计&#xff1a; 简洁风格的移动 UI 善于运用平面化设计&#xff0c;即去除过多的阴影、渐变和立…...

除了伦敦外,英国还有这些热门留学城市

在同学们选择出国留学时&#xff0c;首先要考虑到的便是择校的问题。除了排名、专业、录取要求之外&#xff0c;城市因素也占据了很大比重。 抛开学校自身的优势外&#xff0c;一座城市的氛围、成本、环境都是需要考虑的因素。下面就我们来盘点一下英国热门的留学城市。 爱丁…...

2390. 从字符串中移除星号

2390. 从字符串中移除星号 题目链接&#xff1a;2390. 从字符串中移除星号 代码如下&#xff1a; class Solution { public:string removeStars(string s) {vector<char> sta;for(int i0;i<s.size();i){if(s[i]*) {sta.pop_back();}else {sta.push_back(s[i])…...

UNION、UNION ALL、INTERSECT、MINUS

UNION、UNION ALL、INTERSECT、MINUS&#xff1f; 说明 UNION&#xff1a;对两个结果集进行并集操作&#xff0c;不包括重复行&#xff0c;同时进行默认规则的排序&#xff1b;IUNION ALL&#xff1a;对两个结果集进行并集操作&#xff0c;包括重复行&#xff0c;不进行排序&am…...

Perl 语言开发(九):深入探索Perl语言的文件处理

目录 1. 文件打开与关闭 1.1 打开文件 1.2 关闭文件 2. 读取文件内容 2.1 逐行读取 2.2 一次性读取整个文件 3. 写入文件内容 3.1 覆盖写入 3.2 追加写入 4. 文件测试操作 4.1 文件测试运算符 5. 文件路径操作 5.1 文件路径处理模块 5.2 获取文件路径信息 6. 文…...

稀疏之美:在Mojo模型中实现特征的稀疏表示

稀疏之美&#xff1a;在Mojo模型中实现特征的稀疏表示 在机器学习领域&#xff0c;特征的稀疏表示是一种高效的数据编码方式&#xff0c;尤其适用于具有大量特征和缺失值的数据集。稀疏表示使用特殊的数据结构来存储和处理数据&#xff0c;从而减少内存占用和提高计算效率。Mo…...

如何大幅减少 Vue.js 中的包大小和加载时间,提升用户体验!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 你知道吗,根据Google 的一项研究,如果网站加载时间超过 3 秒,53% 的移动用户会离开该网站? 性能优化是一个经常讨论的话题,但很多开发人员并不关心提高应用的速度。 在前端开发中,优化包大小和加载时间对于提升用户体…...

性能测试相关理解---性能测试流程(二)

六、性能测试流程&#xff08;如何做性能测试&#xff1f;) 根据学习全栈测试博主的课程做的笔记 1、前期准备– 项目初期就开始&#xff0c;业务需求评审时尽量参与,对业务更深刻的认识&#xff08;确定哪些是核心业务、哪些可能存在并发请求、确定什么地方会出现瓶颈,方便后…...

GD32 MCU ADC采样率如何计算?

大家在使用ADC采样的时候是否计算过ADC的采样率&#xff0c;这个问题非常关键&#xff01; 以下为GD32F303系列MCU中有关ADC的参数&#xff0c;其中ADC时钟最大值为40MHz&#xff0c;12位分辨率下最大采样率为2.86MSPS.如果ADC时钟超频的话&#xff0c;可能会造成ADC采样异常&…...

.mkp勒索病毒:深度解析与防范

引言&#xff1a; 在数字化时代&#xff0c;网络安全问题日益严峻&#xff0c;其中勒索病毒作为一种极具破坏性的恶意软件&#xff0c;严重威胁着个人用户和企业机构的数据安全。在众多勒索病毒家族中&#xff0c;.mkp勒索病毒以其强大的加密能力和广泛的传播方式&#xff0c;成…...

5.opencv深浅拷贝

图像处理的复制操作 深浅拷贝 图像复制分成两种&#xff0c;第一种假复制&#xff0c;从原图片选择一部分图片拿出来观察&#xff0c;此时新生成的图片和原图实际上是同一张图片&#xff0c;即浅拷贝 将图片的一部分复制下来&#xff0c;放到新的内存中&#xff0c;即两张完全…...

C++11中新特性介绍-之(二)

11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型&#xff0c;只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导&#xff0c;使用auto声明的变量必须进行初始化&#xff0c;以让编译器推导出它的实际类型&#xff0c;…...

STM32实现看门狗(HAL库)

文章目录 一. 看门狗1. 独立看门狗&#xff08;IWDG&#xff09;1.1 原理1.2 相关配置1.3 相关函数 2. 窗口看门狗&#xff08;WWDG&#xff09;2.1 原理2.2 相关配置2.3 相关函数 一. 看门狗 单片机在日常工作中常常会因为用户配置代码出现BUG&#xff0c;而导致芯片无法正常工…...

【漏洞复现】网络摄像头——弱口令

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现其他补充 漏洞描述 主流网络摄像头存在弱口令。 漏洞复现 JAWS 1&#xff09;信息…...

视觉图像面积计算

在图像处理和计算机视觉中&#xff0c;计算对象面积的常见方法有两种&#xff1a;使用四邻域标记算法和使用轮廓计算。每种方法在不同情况下有各自的优缺点。 四邻域标记算法&#xff1a; 优点&#xff1a; 简单易实现。能够处理带有孔洞的复杂区域&#xff08;只要孔洞不影响连…...

Vue笔记10-其它Composition API

shallowReactive与shallowRef shallow&#xff1a;浅的&#xff0c;和deep相反 shallowReactive&#xff1a;只处理对象最外层属性的响应式 shallowRef&#xff1a;只处理基本数据类型的响应式&#xff0c;不进行对象的响应式处理 如果有一个对象数据&#xff0c;结构比较深&a…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...