I/Ostream
fstream
在这个库中分别有两个类可供使用,分别是 ifstream 和 ofstream.
ifstream 和 ofstream 分别用来读取和写入文件,ifstream 读取文件,ofstream 写入文件.
常见的将文件中的内容读取
c++
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream inputFile("input.txt"); // 打开文件
if (!inputFile) { // 判断文件是否打开成功
cout << "Error: unable to open input file" << endl;
return 1;
}
string line;
while (getline(inputFile, line)) { // 读取文件内容
cout << line << endl;
}
inputFile.close(); // 关闭文件
return 0;
}
常见的向文件中写入内容
c++
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream outputFile("output.txt"); // 打开文件
if (!outputFile) { // 判断文件是否打开成功
cout << "Error: unable to open output file" << endl;
return 1;
}
outputFile << "Hello, world!" << endl; // 写入内容
outputFile.close(); // 关闭文件
return 0;
}
vector and grid
#include "vector.h"
这是斯坦福库中的一个头文件,里面包含了一些常用的向量操作函数,包括向量的初始化,向量的元素的访问,向量的插入,删除,查找等.
vector 避免了 c++数组的一些缺点,比如数组的大小是固定的,而 vector 的大小可以根据需要动态调整.
vector 的 insert 和 remove:
c++
#include "vector.h"
int main() {
Vector<int> v; // 声明一个向量
v.insert(0, 1); // 在索引0处插入元素1
v.insert(1, 2); // 在索引1处插入元素2
v.insert(2, 3); // 在索引2处插入元素3
v.remove(1); // 删除索引1处的元素
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl; // 输出: 1 3
return 0;
}
其中的原理是通过指针来实现的,通过指针可以直接访问 vector 中的元素,而不需要像数组那样通过下标来访问.
#include "grid.h"
这是斯坦福库中的另一个头文件,里面包含了一些常用的网格操作函数,包括网格的初始化,网格的元素的访问,网格的插入,删除,查找等.
grid 和 vector 类似,也是通过指针来实现的,通过指针可以直接访问网格中的元素,而不需要像数组那样通过下标来访问.
和二元数组不同的是,网格可以有多个维度,比如二维网格,三维网格等.
grid 的遍历一般使用两个循环,第一个循环遍历行,第二个循环遍历列
vector and grid 的传递
值传递会复制一遍整个向量或网格,引用传递不会复制,而是直接传递指针,因此如果需要修改向量或网格中的元素,需要使用引用传递.
c++
#include "vector.h"
int main() {
Vector<int> v1;
v1.insert(0, 1);
v1.insert(1, 2);
v1.insert(2, 3);
Vector<int> v2(v1); // 值传递
for (int i = 0; i < v2.size(); i++) {
cout << v2[i] << " ";
}
cout << endl; // 输出: 1 2 3
Vector<int>& v3 = v1; // 引用传递
for (int i = 0; i < v3.size(); i++) {
cout << v3[i] << " ";
}
cout << endl; // 输出: 1 2 3
v3.insert(0, 4);
for (int i = 0; i < v1.size(); i++) {
cout << v1[i] << " ";
}
cout << endl; // 输出: 4 1 2 3
return 0;
}
而是用 const 修饰的引用传递,可以防止修改原来的对象,但是不能修改元素的值.