【问题标题】:Output vector of vector to text file with tab delimiter C++使用制表符分隔符 C++ 将向量的输出向量输出到文本文件
【发布时间】:2025-12-20 08:00:11
【问题描述】:

我正在尝试将 2D 矢量输出到 txt 文件中,问题是我在行尾获得了额外的制表符,在文本的 这是我的代码

 int main()
{

    vector< vector<double> > mv;
    vector< vector<double> >::iterator row;
    vector<double>::iterator col;
    ofstream output_file("Mat.txt");
    setVector(mv,5,5);
    for(row = mv.begin(); row != mv.end();row++)
    {
        for(col = row->begin();col != row->end();col++)
        {
            output_file << *col << '\t';
        }
       output_file << '\n';
    }


    return 0;
}

输出样本:

【问题讨论】:

  • 当然...你在行的最后一个元素后面放了一个 \t!
  • 那么你有什么建议呢?
  • 又快又脏:循环直到 row->end() -1 然后在循环之后才输出最后一个
  • 我很确定在任何体面的教程中循环之前都涵盖了条件分支(例如“这是行/向量中的最后一个/第一个元素”)。你可以在循环体内做这些事情,你知道的。

标签: c++ text vector output


【解决方案1】:

解决问题的两种方法:

  1. 检查是否打印最后一个元素,不要打印制表符/换行符。

  2. 检查您是否正在打印第一个元素,如果没有打印前导制表符/换行符。

【讨论】:

    【解决方案2】:

    随便写

    for(row = mv.begin(); row != mv.end();row++)
    {
        if(row != mv.begin()) {
             output_file << '\n';
        }
        for(col = row->begin();col != row->end();col++)
        {
            if(col != row->begin) {
                output_file << '\t';
            }
            output_file << *col;
        }
    }
    

    【讨论】:

      【解决方案3】:

      重新排列我们的代码,使row 在内部循环中,col 在外部循环中。如果您的命名约定有意义,那将是解决问题的一大步。

      【讨论】:

        【解决方案4】:

        另一种选择:

        for ( row = mv.begin(); row != mv.end(); ++row )
        {
            std::string outs;
            for ( col = row->begin(); col != row->end(); ++col )
            {
                outs += *col;
                outs += '\t';
            }
            outs[outs.length() - 1] = '\n';
            output_file << outs;
        }
        

        【讨论】: