1、ifstream
用于从文件中读取数据。它提供了读取文件内容的方法。用法:
#include<ifstream>
ifstream ifs;
ifs.open("文件路径")
if(ifs.is_open()){
int x =0;
while(ifs>>x){
vec.push_back(x);
}
ifs.close();
}
ofstream
用于在文件中写数据。它提供了写文件的方法。用法:
#include<ofstream>
ofstream ofs;
ofs.open("文件路径")
if(ofs.is_open()){
int x = 0;
while(x<100){
x++;
ofs<<x;
}
ofs.close();
或者:
int numbers[] = {1, 2, 3, 4, 5};
ofs.write(reinterpret_cast<const char*>(numbers), sizeof(numbers));
}
istream
用于从标准输入设备(比如键盘)或其他输入流中读取数据。它提供了从标准输入或其他输入流中获取数据的方法,适用于通用的输入操作。
在C++的 ios_base
类中,有一组文件流相关的常量模式(mode flags),它们用于指定文件打开时的读写模式。这些常量模式通常用于 fstream
类(如 ifstream
、ofstream
和 fstream
)的构造函数或 open()
成员函数中。以下是一些常用的文件常量模式:
ios_base::in
:以只读方式打开文件,用于输入流。ifstream默认
ios_base::out
:打开文件以便写入,会覆盖原有内容,用于输出流。ofstream默认
ios_base::app
:打开文件以便追加写入,每次写入都会添加到文件末尾,用于输出流。ios_base::ate
:打开文件并立即将文件指针移到文件末尾,用于输入或输出流。ios_base::trunc
:打开文件并截断文件到零长度,用于输出流。ios_base::binary
:以二进制模式打开文件,而不是以文本模式打开。
2、getline读取一行字符,直到遇到\n为止。
用法:
ifstream ifs;
ifs.open("文件路径")
getline(ifs,str1);
3、<sstream>库定义了istringstream、ostringstream,分别用来进行流的输入和输出操作。
-
istringstream:
- 用途:用于从字符串中读取数据,即将字符串解析为各种数据类型。将string输入到istringsteam中,然后可以从中提取需要的数据。
- 举例:
#include <iostream> #include <sstream> #include <string> int main() { std::string input = "123 456 789"; std::istringstream iss(input); int num1, num2, num3; iss >> num1 >> num2 >> num3; std::cout << "Numbers are: " << num1 << ", " << num2 << ", " << num3 << std::endl; return 0; }
- 说明:在这个例子中,istringstream从字符串
input
中提取整数,并将其存储在变量num1
、num2
和num3
中。
-
ostringstream:
- 用途:用于将数据格式化为字符串,即将各种数据类型转换为字符串。将各种类型数据输入到ostringstream中,输出string。需要通过os.str()将ostringstream类型转化为string类型。
- 举例:
#include <iostream> #include <sstream> #include <string> int main() { std::ostringstream oss; int num1 = 123; double num2 = 45.67; oss << "Numbers are: " << num1 << " and " << num2; std::string output = oss.str(); std::cout << "Output string: " << output << std::endl; return 0; }
- 说明:在这个例子中,ostringstream用于构建一个包含整数
num1
和浮点数num2
的字符串。
从一个文件中读以空格和换行符分隔的数据流程:
ifstream ifs(文件路径);
if(ifs.is_open())
{
string str1;
getline(ifs, str1);
istringstream iss(str1);
uint32 data;
while(iss>>data)
{
data_v.push_back(data);
}
}
4、cout的作用是识别变量,并将变量的实际值转成字符串后输出到终端。cout可以通过dec(十进制)/hex(十六进制)和oct(八进制)来控制输出数据格式。cout是一个关联控制台的对象。<<是ostream库中的重载运算符号,通过cout对象调用,该符号将数据插入到输出到缓存区的流中。endl可以不用等到缓存区满就可以刷新缓存区,从而输出到终端。
5、cout.width(n)输出n个字符,不足则前面补空格。如果前面有cout.fill(*)则在前面补*,而不是空格。可以通过cout.setf(ios_base::功能成员函数)实现cout数据格式的修改,比如showpoint:显示末位小数;show_base:加前缀(0x等);boolalpha:输出true或者false;left:左对齐;right:右对齐,等。
常见的 ios_base
标准控制符及其作用:
-
boolalpha
:控制bool
类型的输出格式。设置后,true
和false
会分别以字符串 “true” 和 “false” 输出,而不是数值 1 和 0。 -
noboolalpha
:取消boolalpha
的设置,使bool
类型的输出恢复为数值输出(1 和 0)。 -
showbase
:在输出整数时,显示数值的进制前缀(例如,0x
表示十六进制,0
表示八进制)。 -
noshowbase
:取消showbase
的设置,使输出整数时不显示进制前缀。 -
showpoint
:在浮点数输出中始终显示小数点,即使小数部分为零。 -
noshowpoint
:取消showpoint
的设置,使浮点数输出时不显示不必要的小数点。 -
showpos
:在非负数前显示正号+
。 -
noshowpos
:取消showpos
的设置,使输出中不显示正号+
。 -
uppercase
:将字母输出为大写形式。 -
nouppercase
:取消uppercase
的设置,将字母输出为小写形式(默认)。
6、cin
是 std::istream
类型的对象,cin通过cin>>x,把输入的信息转化为计算机可以接受的变量。cin使用空格、制表符和换行符来确定字符串的结束位置。cin输入数据类型和预期不一致时会产生异常,需要调用cin.clear()清除异常。
cin.get(a,size)可以获取指定长度size-1个字符。cin读到空格结束。
get获取固定长度字符串,‘\n’不会导致获取字符串结束。
read(buf,size):从输入流中读取size长度的数据。
peek()返回下一个字符。
putback将一个字符写入的输入流中。
7、 std::string homeDir = std::getenv("HOME");
std::ifstream fin(homeDir + "/dp02_sim/filter.config");
//读用户目录下的配置文件
8、LogMessage& operator<<(const T& data) {
if (parser.dump_type & 1) log_stream_ << data;
if (parser.dump_type & 2) of_stream_ << data;
}
重载<<运算符,将data输入到log_stream_或者of_stream_中。
9、通过<<"\x1b[32m"可以实现字符串不同颜色的打印。