📜  在向量 cpp 中存储文件 - C++ (1)

📅  最后修改于: 2023-12-03 14:51:25.230000             🧑  作者: Mango

在向量 cpp 中存储文件 - C++

在 C++ 中,我们经常需要存储一些数据,例如日志、配置文件等。这时候,我们可以使用向量(vector)来存储数据。

什么是向量?

向量是 STL 中的一种容器,它可以动态存储数据,类似于数组,但是长度可以动态变化。

使用向量有以下几个好处:

  • 可以动态插入或删除元素,而不需要手动移动其他元素。
  • 向量元素的内存是连续的,因此可以快速访问任意一个元素,具有良好的随机访问性能。
  • 向量提供了丰富的常用操作函数,例如排序、倒序、查找等。
如何使用向量存储文件?

在 C++ 中,可以使用文件流(fstream)实现文件的读写操作。

假设我们有一个保存学生信息的文件 students.txt,每一行包含一个学生的姓名和分数,用空格隔开。

我们可以使用以下代码将文件中的数据读入到一个向量中:

#include <fstream>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    vector<pair<string, int>> students; // 学生向量,每个元素是一个学生的姓名和分数

    ifstream fin("students.txt"); // 打开文件
    if (!fin) { // 打开失败
        cerr << "Failed to open file students.txt\n";
        return -1;
    }

    // 读取文件中的数据,存储到向量中
    string name;
    int score;
    while (fin >> name >> score) {
        students.push_back(make_pair(name, score));
    }

    fin.close(); // 关闭文件

    // 输出向量中存储的学生信息
    cout << "Students:\n";
    for (auto& student : students) {
        cout << student.first << " " << student.second << "\n";
    }

    return 0;
}

上述代码中,我们定义了一个学生向量 students,每个元素是一个 pair,存储一个学生的姓名和分数。

然后我们使用文件流 ifstream 打开文件 students.txt,如果打开失败,则会输出错误信息并返回 -1。

接着使用 while 循环将文件中的数据逐行读取,使用 push_back 函数将每个学生的信息存储到向量中。

最后输出向量中存储的学生信息,使用 auto 关键字可以让编译器自动推导变量类型,更加方便。

如何将向量中的数据写入到文件中?

除了从文件中读取数据,我们也可以将向量中的数据写入到文件中,只需要使用 ofstream 类就可以了。

以下是一个示例代码,将一个向量中的字符串存储到文件中:

#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    vector<string> words = {"hello", "world", "cpp"}; // 字符串向量

    ofstream fout("words.txt"); // 打开文件
    if (!fout) { // 打开失败
        cerr << "Failed to open file words.txt\n";
        return -1;
    }

    // 将字符串向量中的每个字符串写入到文件中
    for (const auto& word : words) {
        fout << word << "\n";
    }

    fout.close(); // 关闭文件

    cout << "Done.\n";
    return 0;
}

上述代码中,我们定义了一个字符串向量 words。

然后使用 ofstream 打开文件 words.txt,如果打开失败,则会输出错误信息并返回 -1。

接着使用 for 循环将向量中的每个字符串逐个写入到文件中,使用 \n 换行符来分隔每个字符串。

最后关闭文件,输出 Done.。

总结

向量是 C++ 中常用的容器,可以动态存储数据。我们可以使用文件流来读写文件,将文件中的数据存储到向量中,或将向量中的数据写入到文件中。

使用 STL 容器和文件流可以使 C++ 程序变得更加高效、灵活、易于维护。