一 流的概念
目录
三常用的成员函数
一流的概念
1.流是一种抽象的概念,表示数据无结构化传递。
2.c++流 外界-->内存 内存-->外界
3.c++有I/O标准类库
二fstream的使用
一作用
fstream是c++中常用的文件操作类
二c++文件操作
1包含头文件#include 并且打开命名空间std或者std::fstream;
2通过fstream的对象操作文件
#include<iostream>
using namespace std;
#include<fstream>
using std::fstream;
int main()
{
fstream file;//实例化对象
return 0;
}
三常用的成员函数
1基本操作
open("文件路径",打开方式);
//文件路径:绝对路径,相对路径(一般使用相对路径)
//打开方式:只读,只写,二进制...
视角:以程序本身为视角
ios::in 读取数据 从文件===>程序 没有文件会报错
ios ::out 写入数据 从程序===>文件 没有文件会创建文件
#include<iostream>
using namespace std;
#include<fstream>
int main()
{
//0.创建对象
fstream file;
//1.打开文件.
file.open("test.txt",ios::out);
//2.中间操作.
file.is_open();//判断文件是否打开。返回bool类型
file.eof();//判断是否到达文件末尾 返回bool类型
//......
//3.最后记得关闭文件.
file.close();
return 0;
}
2put与get
#incldue<iostream>
using namespace std;
#include<fstream>
int main()
{
//put(): 往文件里写入一个字符
fstream file;
file.open("write.txt";ios::out);//以out形式写入一个名叫write的文件
file.put('S');
char ch='A';
file.put(ch);
file.close();//记得在末尾关闭文件.
file.open("test.txt",ios::in);//打开文件
//get():从文件中读取字符
char c=0;
file.get(C);//将从文件里面读取出来的东西存到c里面.
cout<<"c: "<<c<<endl;
c=file.get();
cout<<"c: "<<C<<endl;
file.close();
//get读文件的读取是一个一个字母读的,且是顺序读取的.
return 0;
}
3二进制的形式读写文件
#include<iostream>
using namespace std;
#include<fstream>
int main()
{
fstream file;
//write(): 写入文件
file,open("write.txt",ios::out);
int hp=0x11223344;
file.write((char*)&hp,sizeof(int));//write的格式
file.close();
//read():读取文件
file.open("write.txt",ios::in);
int num=0;
file.read((char*)&hp,sizeof(int));
file.close();
cout<<hex<<"num= "<<num<<endl;//hex表示为十六进制输出
return 0;
}
三使用重载的>><<
#include<iostream>
using namespace std;
#include<fstream>
int main()
{
fstream file;
//<<:写入文件
file.open("write.txt",ios::out);
file<<"abc123!"<<endl;
file<<"123"<<endl;
int mp=80;
file<<mp<<endl;
file.close();
//>>:读取文件
file.open("write.txt",ios::in);
char str[128];//因为一般char最大值为128.
int num;
int num1;
file>>str>>num>>num1;
file.close();//记得关闭文件.
cout<<str<<endl<<num<<endl<<num1<<endl;
return 0;
}
Lambaba表达式
定义并创建匿名函数对象
作用:简化编程工作
语法:
//简单模式
[](){}
[函数对象参数](操作符重载函数参数){函数体}
//标准模式
[](){}
[函数对象参数](操作符重载函数参数)mutable->返回值类型
{
函数体
};
例子
#include<iostream>
using namespace std;
void fun()
{
cout<<"这是一个函数"<<endl;
}
int fun(int& n)//此处&是为了避免调用构造函数。
{
return ++n;
}
int main()
{
//直接调用(一般为普通函数)
func();
//通过函数指针
void(*pFun)()=func;
Pfun();
int n=0;
auto pLam=[]()//当不知道它的类型的时候就用auto去试试就知道了
{
//n
cout<<"这是一个Lambda表达式"<<endl;
}
//Lambaba表达式只能通过指针调用,因为这个是一个匿名函数,没有名字,就不可以直接调用了。
PLam();
int num = 0;
cout << endl << "num = " << num << endl;
// 一 引用
fun1(num); cout << "num = " << num << endl;
// 二 值
fun2(num); cout << "num = " << num << endl;
int num1 = 0;
//一 引用
auto PLam10=[&num]()
{
num++;
};
PLam10();
cout<<endl<<"num= "<<num<<endl;
auto PLam11=[&]()//一般这样子写就直接可以不用写调用几个值了
{
num++;
num1=9;//调用两个
}
PLam11();
cout<<"num= "<<num<<"num1= "<<num1<<endl;
//二 值
auto PLam20=[num]()
{
//num++
};
PLam20();
cout<<endl<<"num= "<<num<<endl;
return 0;
}