二进制文件读写
ios_base::out 以写入方式打开文件。
ios_base::binary 以二进制模式打开文件
std::ofstream ofs(FILE_PATH,ios_base::app);//以追加的形式打开文件
// 写入学生数量
int numStudents = students.size();
ofs.write(reinterpret_cast<const char*>(&numStudents), sizeof(numStudents));
//说明
二进制方式写文件主要利用流对象调用成员函数write
函数原型 :ostream &write(const char * buffer,int len);
函数名称前面加引用符号“&”的意思是返回引用类型。格式:类型标识符 &函数名(形参列表及类型说明){ //函数体}。
函数参数
在函数参数中:如果&在函数参数的类型声明中,那么它表示引用,这样函数可以修改传入参数的值
在函数参数中:通过将指针作为函数参数的方法,既可以返回多个运算结果,又避 免了使用全局变量
“const char * buffer”是指,字符指针buffer指向内存中一段存储空间,这是字符型常量指针,指向不可以改,指向的 内容可以改;
函数调用
reinterpret_cast<const char*>(&numStudents)
reinterpret_cast用于将指向其他类型的指针转换为const char*类型的指针,以确保正确地将二进制数据写入文件
函数传参
1,指针传参 -> 将变量的地址直接传入函数,函数中可以对其值进行修改。
2,引用传参 -> 将变量的引用传入函数,效果和指针相同,同样函数中可以对其值进行修改。
变量:
引用的声明方法:类型标识符 &引用名=目标变量名; &在此不是求地址运算,而是起标识作用
常引用声明方式:const 类型标识符 &引用名=目标变量名;
reinterpret_cast 运算符可用于在指针和不相关类型的引用之间进行转换 reinterpret:重新解释
reinterpret_cast 不执行任何类型检查或转换。 它只是将对象的位重新解释为不同的类型
dynamic_cast static_cast const_cast
seekg():输入 文件指针跳转函数。表示将输入文件指针跳转到指定字节位置‘ "g" 表示 "get",
seekp():输出 文件指针跳转函数。表示将输出文件指针跳转到指定位置 p是put缩写
创建一个二进制文件,
其中包含一些标头,用于标识格式并提供元数据
文件的其余部分包含原始二进制值
数据结构
C++11新标准引入了三个新成员:
emplace、emplace_back、emplace_front,
分别对应 insert、push_back 、push_front
调用emplace时,则是将参数传递给元素类型的构造函数,emplace成员使用这些参数在容器管理的内存空间中直接构造元素,没有拷贝的操作
unorder_map
成员函数
1. 迭代器
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾位置的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
元素的键值分别是迭代器的first和second属性。
c++ 里面的map容器的迭代器里面 有个first 和 second,分别指向键值和数值
使用(*it).first或者it->first 获取
it->first 代表键;
it->second 代表值
std::map<int, std::string> myMap = {{1, "one"}, {2, "two"}, {3, "three"}};
for (const auto& pair : myMap) {
std::cout << pair.first << " => " << pair.second << '\n';
}
for (auto [key, val] : myMap) {
cout << key << " " << val << endl;
}
vector
c++遍历vector的四种方式
可以使用迭代器,
可以使用auto,
可以使用for_each,
可以使用下标。 v1[i]
迭代器( iterator) 很多容器没有下标,但是所有容器都有迭代器
it->first代表下标;it->second 代表值
emplace() 每次只能插入一个元素,而不是多个
emplace函数不像emplace_back那样自动处理内存分配问题,所以在使用emplace时,如果vector的大小超过其容量,它将需要重新分配
struct
结构体
结构体变量的首地址:
1.结构体变量的地址就是结构体的首地址
2.结构体第一个成员的地址就是结构体的首地址
访问结构体中的成员,用 .符号
使用指针访问结构体中的成员:使用 操作符-> 来访问结构体
函数
sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,
前者打印到字符串中,后者则直接在命令行上输出
sprintf 是个变参函数,定义如下:
int sprintf( char *buffer, const char *format [, argument] ... );
//把整数123 打印成一个字符串保存在s 中。
sprintf(s, "%d", 123); //产生"123"
操作系统相关
short [int] 内存大小 2byte=16bit
数据范围 -32768~32767(即-2^15~2^15-1)
unsigned short [int]内存大小 2byte=16bit
数据范围 0~65535(即0~2^16-1)
关键字
auto 不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,
auto定义的变量的类型由变量定义和初始化语句等号的右边的值的类型决定,
auto声明的变量必须由编译器在编译时期推导而得
C++断点调试
vscode --设置断点
标签:emplace,函数,代码,C++,cast,类型,const,指针,复习
From: https://www.cnblogs.com/ytwang/p/18102342