c++ - 从 vector 数组制作平面文件

标签 c++ flat

我的计划是制作一个分为两列的平面文件,为此我启动了两个 vector 数组。两个 vector 数组将位于平面文件的两列中。我认为我遇到的问题是在平面文件的列中填充 vector 元素。我是不是填错了?

outFile << vec1[i] << "\t" << vec2[i] << endl;

  #include <fstream>
#include <vector>

using namespace std;
//int main()
void ffile()
{
    std::ofstream ofs;
    ofstream outFile;
    outFile.open("flatFile.dat");
     vector<int> vec1{ 10, 20 };
     vector<int> vec2{ 0, 20, 30 };


    for (int i=0; i<=3;i++)

{
  outFile << vec1[i] << "\t" << vec2[i] << endl;
    }
}

更新的问题: 我有两个 vector 大小不同的 vector 。如果我使用运行代码的大 vector 的大小会有什么问题吗?

另一件事是,在平面文件中我没有看到两列,而是只看到一列和来自 vector vec2[i] 的条目。如何让 vec1 的第一列和 vec2 的第二列都有这两个条目?

最佳答案

C++ 不允许从 vector 中读取超过其最后一个元素的内容。句号。如果您使用 at 方法,您将得到一个 out_of_range 异常,而对于 [] 运算符,您只会遇到未定义的行为。

这意味着您必须检查 vector 的大小。您的代码可能会变成:

#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
//int main()
void ffile()
{
    // std::ofstream ofs;     // unused 
    ofstream outFile;
    outFile.open("flatFile.dat");
    vector<int> vec1{ 10, 20 };
    vector<int> vec2{ 0, 20, 30 };

    // use the sizes of both vectors to compute the loop limit
    for (unsigned i = 0; i <= std::max(vec1.size(), vec2.size()); i++)

    {
        if (i < vec1.size()) outFile << vec1[i];  // only output actual values
        outFile << "\t";
        if (i < vec2.size()) outFile << vec2[i];
        outFile << endl;
    }
}

此代码应提供类似于以下内容的文本文件:

0   0
20  20
    30

(它在我的测试中...)

关于c++ - 从 vector 数组制作平面文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59063968/

相关文章:

c++ - 函数调用的成本是多少?

c++ - strcpy 字符指针中止

javascript - 展平嵌套 json 对象

file - 数据类型规范 '9(7)V9T' 是什么意思?

android - 没有阴影的 Material 设计按钮

带有 SQL 语法的 PHP 简单文本数据库

c++ - 将 std::chrono::time_point 转换为 unix 时间戳

c++ - R:在 C++ 中抑制来自 Rprintf 的消息

c++ - 如何序列化共享/弱指针?