C++精解【10】

文章目录

  • 读写文件
    • 概述
    • example
  • csv
    • 读文件
    • 读取每个字段
    • 读取机器学习数据库iris
  • constexpr函数
  • GMP大整数
    • codeblock环境配置
    • 数据类型
    • 函数类
  • Eigen
    • minCoeff 和maxCoeff
    • Array类

读写文件

概述

  • fstream
typedef basic_fstream<char, char_traits<char>> fstream;

此类型是类模板 basic_fstream 的同义词,专用于具有默认字符特征的 char 类型的元素。

  • ifstream
    定义要用于从文件中按顺序读取单字节字符数据的流。
using namespace std;ifstream infile("hello.txt");if (!infile.bad())
{cout << infile.rdbuf();infile.close();
}
  • ofstream

专用于 char 模板参数的类型 basic_ofstream。

typedef basic_ofstream<char, char_traits<char>> ofstream;
  • openmode

如何与流进行交互。

class ios_base {
public:typedef implementation-defined-bitmask-type openmode;static const openmode  in;static const openmode  out;static const openmode  ate;static const openmode  app;static const openmode  trunc;static const openmode  binary;// ...
};

example

  • 例1
#include <iostream>
#include <fstream>using namespace std;int main(){//writeofstream fileOut;fileOut.open("hello.txt");fileOut<<"hello,world!"<<endl;fileOut<<"hello,hello";fileOut.close();//readifstream fileIn;char helloTxt[80];fileIn.open("hello.txt");fileIn>>helloTxt;cout<<helloTxt<<endl;fileIn>>helloTxt;cout<<helloTxt<<endl;fileIn.close();}
hello,world!
hello,helloProcess returned 0 (0x0)   execution time : 0.134 s
Press any key to continue.
  • 例2
// basic_fstream_class.cpp
// compile with: /EHsc#include <fstream>
#include <iostream>using namespace std;int main(int argc, char **argv)
{fstream fs("hello.txt", ios::in | ios::out | ios::trunc);if (!fs.bad()){// Writefs << "hello,world" << endl;fs << "hello!" << endl;fs.close();// readfs.open("hello.txt", ios::in);cout << fs.rdbuf();fs.close();}
}
  • 例3
#include <iostream>
#include <fstream>using namespace std;int main(){//writeofstream fileOut;fileOut.open("hello.txt");fileOut<<"hello,world!"<<endl;fileOut<<"hello,hello";fileOut.close();//readifstream fileIn;char helloTxt[80];fileIn.open("hello.txt");while (fileIn>>helloTxt){cout<<helloTxt<<endl;}fileIn.close();}
  • 例4
#include <iostream>
#include <fstream>using namespace std;int main(){//writeofstream fileOut;fileOut.open("hello.txt");fileOut<<"hello,world!"<<endl;fileOut<<"hello,hello";fileOut.close();//readifstream fileIn;char helloTxt[80];fileIn.open("hello1.txt");if (!fileIn.is_open()){cout<<"打开失败!"<<endl;return 0;}while (fileIn>>helloTxt){cout<<helloTxt<<endl;}fileIn.close();}
  • 例5
#include <iostream>
#include <fstream>using namespace std;int main(){//writeofstream fileOut;fileOut.open("hello.txt");fileOut<<"hello,world!"<<endl;fileOut<<"hello,hello";fileOut.close();//readifstream fileIn;char helloChar;fileIn.open("hello.txt");if (!fileIn.is_open()){cout<<"打开失败!"<<endl;return 0;}int i=0;while (fileIn.get(helloChar)){cout<<helloChar;if (helloChar!='\n') i++;}cout<<endl<<"文件的字符数:"<<i<<endl;fileIn.close();}
hello,world!
hello,hello
文件的字符数:23Process returned 0 (0x0)   execution time : 0.248 s
Press any key to continue.

更多内容在微软文档

csv

读文件

#include <iostream>
#include <fstream>using namespace std;int main(){//readifstream fileIn;char helloChar;fileIn.open("e:/ml_data/iris/iris.data");if (!fileIn.is_open()){cout<<"打开失败!"<<endl;return 0;}int i=0;while (fileIn.get(helloChar)){cout<<helloChar;if (helloChar!='\n') i++;}cout<<endl<<"文件的字符数:"<<i<<endl;fileIn.close();}

读取每个字段

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>using namespace std;
vector<string> split(const string &text, char separator);
int main(){//readifstream fileIn;char helloStr[100];vector<string> sampleDatas;fileIn.open("e:/ml_data/iris/iris.data");if (!fileIn.is_open()){cout<<"打开失败!"<<endl;return 0;}while (fileIn>>helloStr){sampleDatas=split(helloStr,',');for (const string &data: sampleDatas) {cout << data<<" " ;}cout<<endl;}fileIn.close();}vector<string> split(const string &text, char separator) {vector<string> tokens;stringstream ss(text);string item;while (getline(ss, item, separator)) {if (!item.empty()) {tokens.push_back(item);}}return tokens;
}

读取机器学习数据库iris

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <regex>using namespace std;
struct IrisDa{float *irisX;int dataSize;int d;~IrisDa(){delete[] irisX;}
};vector<string> split(const string &text, char separator);
string removeSpaces(const string& input);
void rbLearn(const IrisDa *irisDa);int main(){ifstream fileIn;char helloStr[100];//read csvfileIn.open("e:/ml_data/iris/iris_sample.data");if (!fileIn.is_open()){cout<<"打开失败!"<<endl;return 0;}regex strRx(R"((\d+)(\.)(\d+))");smatch match;while (fileIn>>helloStr){//construct x(n) and d(n)IrisDa *irisDa=new IrisDa;vector<string> sampleDatas=split(helloStr,',');int dataCount=sampleDatas.size();float *irisX= new float[dataCount];//x(n)irisX[0]=1.0;int irisD;//d(n)int i=1;for (const string &data: sampleDatas) {string irisData=removeSpaces(data);bool found = regex_match(irisData, match, strRx);if (found) {irisX[i]=stof(irisData);i++;}else{if (irisData=="Iris-setosa"){irisD=1;}else{irisD=-1;}}}irisDa->irisX=irisX;irisDa->d=irisD;irisDa->dataSize=dataCount;rbLearn(irisDa);}fileIn.close();
}void rbLearn(const IrisDa *irisDa){cout<<"正在处理数据..."<<endl;for (int i=0;i<irisDa->dataSize;i++) {cout<<irisDa->irisX[i]<<" ";}cout<<endl;
}vector<string> split(const string &text, char separator) {vector<string> tokens;stringstream ss(text);string item;while (getline(ss, item, separator)) {if (!item.empty()) {tokens.push_back(item);}}return tokens;
}string removeSpaces(const string& input) {string result = input;result.erase(std::remove(result.begin(), result.end(), ' '), result.end());return result;
}

constexpr函数

函数可能在编译时求值,则声明它为constexpr,以提高效率。需要使用constexpr告诉编译器允许编译时计算。

constexpr int min(int x, int y) { return x < y ? x : y; }
void test(int v)
{int m1 = min(-1, 2);            // 可能在编译期计算constexpr int m2 = min(-1, 2);  // 编译时计算int m3 = min(-1, v);            // 运行时计算constexpr int m4 = min(-1, v);  // 错误,不能在编译期计算
}
int dcount = 0;
constexpr int double(int v)
{++dcount;   // constexpr 函数无副作用,因为这一行错误return v + v;
}

constexpr函数被隐式地指定为内联函数,此外,constexpr允许递归。

#include <iostream>
constexpr int fac(int n)
{return n > 0 ? n * fac( n - 1 ) : 1;
}
inline int myadd(int x,int y){return x+y;};
int main()
{int n;std::cout<<"请输入阶乘参数:";std::cin>>n;std::cout<<std::endl<<fac(n)<<std::endl;std::cout<<myadd(12,55)<<std::endl;return 0;
}

GMP大整数

codeblock环境配置

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

数据类型

  • 整型
mpz_t sum;struct foo { mpz_t x, y; };mpz_t vec[20];
  • 有理数
mpq_t quotient;

也是高倍精度分数。

  • 浮点数
mpf_t fp;

浮点函数接受并返回C类型mp_exp_t中的指数。目前,这通常是很长的,但在某些系统上,这是效率的一个指标。

  • 指针
Mpz_ptr用于指向mpz_t中的元素类型的指针
Mpz_srcptr for const指针指向mpz_t中的元素类型
Mpq_ptr用于指向mpq_t中的元素类型的指针
Mpq_srcptr for const指针指向mpq_t中的元素类型
Mpf_ptr用于指向mpf_t中元素类型的指针
Mpf_srcptr for const指针指向mpf_t中的元素类型
指向gmp_randstate_t中元素类型的指针
Gmp_randstate_srcptr for const指针指向gmp_randstate_t中的元素类型

函数类

用于有符号整数算术的函数,其名称以mpz_开头。关联类型为mpz_t。这门课大约有150个函数
用于有理数算术的函数,其名称以mpq_开头。关联类型为mpq_t。这门课大约有35个函数,但整数函数可以分别对分子和分母进行算术运算。
用于浮点运算的函数,其名称以mpf_开头。关联类型为mpf_t。这门课大约有70个函数。
对自然数进行操作的快速低级函数。这些由前面组中的函数使用,您也可以从时间要求非常严格的用户程序中直接调用它们。这些函数的名称以mpn_开头。关联类型为mp_limb_t数组。这个类中大约有60个(难以使用的)函数。
各种各样的功能。设置自定义分配的函数和生成随机数的函数。

Eigen

minCoeff 和maxCoeff

不带参数时,返回最小元素和最大元素,带参数时,返回元素所在坐标

#include <iostream>
#include "e:/eigen/Eigen/Dense"
using namespace std;
using namespace Eigen;
int main(){Matrix2d m {{1,2},{3,4}};std::ptrdiff_t i, j;int minOfM = m.minCoeff(&i,&j);cout << "Here is the matrix m:\n" << m << endl;cout << "Its minimum coefficient (" << minOfM<< ") is at position (" << i << "," << j << ")\n\n";int maxOfM= m.maxCoeff(&i,&j);cout << "Its maximum coefficient (" << maxOfM<< ") is at position (" << i << "," << j << ")\n\n";RowVector4i v = RowVector4i::Random();int maxOfV = v.maxCoeff(&i);cout << "Here is the vector v: " << v << endl;cout << "Its maximum coefficient (" << maxOfV<< ") is at position " << i << endl;int minOfV = v.minCoeff(&j);cout << "Its minimum coefficient (" << minOfV<< ") is at position " << j << endl;}
Here is the matrix m:
1 2
3 4
Its minimum coefficient (1) is at position (0,0)Its maximum coefficient (4) is at position (1,1)Here is the vector v:  730547559 -226810938  607950953  640895091
Its maximum coefficient (730547559) is at position 0
Its minimum coefficient (-226810938) is at position 1Process returned 0 (0x0)   execution time : 0.305 s
Press any key to continue.

Array类

Array类提供了通用数组,而Matrix类则用于线性代数。此外,Array类提供了一种简单的方法来执行系数操作,这种操作可能没有线性代数意义,比如向数组中的每个系数添加一个常数,或者对两个数组进行系数乘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/40083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】什么是数据融合(Data Fusion)?

目录 一、数据融合的定义 二、数据融合的类型 三、数据融合的挑战 四、数据融合的方法 五、数据融合的关键环节 1.数据质量监控指标的制定和跟踪 2.异常检测和处理机制 3.实时数据监测与反馈机制 4.协同合作与知识共享 一、数据融合的定义 数据融合&#xff08;Data Fusion&…

STM32基本定时器、通用定时器、高级定时器区别

一.STM32基本定时器、通用定时器、高级定时器区别 STM32系列微控制器中的定时器资源分为基本定时器&#xff08;Basic Timer&#xff09;、通用定时器&#xff08;General Purpose Timer&#xff09;和高级定时器&#xff08;Advanced Timer&#xff09;三类&#xff0c;它们在…

PyCharm远程开发配置(2024以下版本)

目录 PyCharm远程开发配置 1、清理远程环境 1.1 点击Setting 1.2 进入Interpreter 1.3 删除远程环境 1.4 删除SSH 2、连接远程环境 2.1 点击Close Project 2.2 点击New Project 2.3 项目路径设置 2.4 SSH配置 2.5 选择python3解释器在远程环境的位置 2.6 配置远程…

C++ 现代教程二

线程支持库 - C中文 - API参考文档 GitHub - microsoft/GSL: Guidelines Support Library Fluent C&#xff1a;奇异递归模板模式&#xff08;CRTP&#xff09; - 简书 #include <thread> #include <iostream> #include <unordered_map> #include <futu…

区块链加载解析方法

一.区块链加载解析 对于数据的下载主要包括三种方式&#xff1a; 1.实现比特币网络协议&#xff0c;通过该协议和其他比特币全节点建立联系&#xff0c;然后同步区块数据。 2.通过比特币节点提供的API服务下载区块链数据。 3.通过blickchain.com提供的rest服务下载区块数据…

《后端程序猿 · Caffeine 本地缓存》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻一周&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

EE架构大跃进:特斯拉、小鹏引领舱驾融合,从域控融合走向单SoC

作者 |肖恩 编辑 |德新 智能汽车发展到今天&#xff0c;整车电气架构已经从分布式架构逐渐迈向中央集成式架构&#xff0c;传统的小控制器被集成到按功能划分的大域控里&#xff0c;下一个阶段将是跨域的融合&#xff0c;通过不同功能域的集成实现中央计算平台的最终目标。 …

Visual Studio 中的键盘快捷方式

1. Visual Studio 中的键盘快捷方式 1.1. 可打印快捷方式备忘单 1.2. Visual Studio 的常用键盘快捷方式 本部分中的所有快捷方式都将全局应用&#xff08;除非另有指定&#xff09;。 “全局”上下文表示该快捷方式适用于 Visual Studio 中的任何工具窗口。 生成&#xff1…

[leetcode hot 150]第四百五十二题,用最少数量的箭引爆气球

题目&#xff1a; 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。…

[leetcode hot 150]第三题,无重复字符的最长子串

题目&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串的长度。 可以使用"滑动窗口"的方法来解决这个问题。基本思路如下: 使用两个指针(start和end)来定义一个窗口移动end指针来扩大窗口,直到遇到重复字符如果遇到重复字符,移动s…

Vite: 插件流水线之核心编译能力

概述 Vite 在开发阶段实现了一个按需加载的服务器&#xff0c;每一个文件请求进来都会经历一系列的编译流程&#xff0c;然后 Vite 会将编译结果响应给浏览器。在生产环境下&#xff0c;Vite 同样会执行一系列编译过程&#xff0c;将编译结果交给 Rollup 进行模块打包这一系列…

什么是 URL ?

统一资源定位符&#xff08;URL&#xff09;是一个字符串&#xff0c;它指定了一个资源在互联网上的位置以及如何访问它。URL 是由几部分组成的&#xff0c;每部分都有其特定的作用&#xff1a; 协议/方案&#xff1a;这是 URL 的开头部分&#xff0c;表明了用于访问资源的协议…

antfu/ni 在 Windows 下的安装

问题 全局安装 ni 之后&#xff0c;第一次使用会有这个问题 解决 在 powershell 中输入 Remove-Item Alias:ni -Force -ErrorAction Ignore之后再次运行 ni Windows 11 下的 Powershell 环境配置 可以参考 https://github.com/antfu-collective/ni?tabreadme-ov-file#how …

Java---Mybatis详解二

雄鹰展翅凌空飞&#xff0c; 大江奔流不回头。 壮志未酬心未老&#xff0c; 豪情万丈任遨游。 巍巍高山攀顶峰&#xff0c; 滔滔黄河入海流。 风云变幻凭君舞&#xff0c; 踏遍天涯尽逍遥。 目录 一&#xff0c;环境准备 二&#xff0c;删除 三&#xff0c;删除(预编译SQL) 为什…

Celery入门教程

一.Celery介绍 1.Celery架构 Celery架构基于可插拔组件&#xff08;pluggable components&#xff09;和根据选择的消息传输&#xff08;代理&#xff09;(message transport(broker))协议实现的消息交换机制。 2.Celery模块 &#xff08;1&#xff09;任务模块 Task 包含异…

2024中国西安科博会暨硬科技产业博览会11月召开

2024第18届中国西安国际科学技术产业博览会暨硬科技产业博览会 时间&#xff1a;2024年11月3日-5日 地点&#xff1a;西安国际会展中心 主办单位&#xff1a;中国国际科学技术合作协会 陕西省科技资源统筹中心 协办单位&#xff1a;西安市科学技术协会 西安市中小企业协会、…

昇思25天学习打卡营第3天|yulang

今天主要学习03-张量Tensor&#xff0c;主要包含了处理创建张量、张量的属性、张量索引和张量运算&#xff0c;稀疏张量&#xff0c;有点看不太懂&#xff0c;感觉要开始入门到放弃了&#xff1f;张量在构建和训练深度学习模型中的实际应用&#xff0c;如卷积神经网络。 张量&a…

Django学习第三天

python manage.py runserver 使用以上的命令启动项目 实现新建用户数据功能 views.py文件代码 from django.shortcuts import render, redirect from app01 import models# Create your views here. def depart_list(request):""" 部门列表 ""&qu…

一键获取:Win11笔记本系统下载地址!

在笔记本电脑操作中&#xff0c;用户想安装一款适合笔记本电脑使用的Win11系统&#xff0c;但不知道在哪里可以下载到&#xff1f;接下来系统之家小编给大家分享Win11笔记本系统下载地址&#xff0c;有需要的小伙伴一键点击即可获取&#xff0c;快速安装系统&#xff0c;即可体…

<电力行业> - 《第15课:电力领域(一)》

1 电网 发电厂与最终用电用户&#xff08;负荷&#xff09;往往相距很远&#xff0c;因此电力需要由电厂”输送“到最终用户&#xff0c;即“输电环节“&#xff0c;电流的输送往往导致因线路发热造成损耗&#xff0c;所以在输送的时候都是通过变电升高电压&#xff0c;让电流…