【问题标题】:Two-dimensional vector printing二维矢量打印
【发布时间】:2014-11-14 19:35:20
【问题描述】:

我有一个二维字符串向量需要打印出来。整个程序应该从 txt 文件中读取一行,将其中的每个单词存储为不同的元素,然后将“单词向量”推送到包含例如 100 行的向量中。我已经完成了所有工作,但是当我必须打印矢量时问题就出现了。每行可以有不同数量的单词,例如:

我喜欢蛋糕

很多。

所以我不能使用:

for (int i = 0; i < 2; i++)
{
    for (int j = 0; j < 3; j++)
    {
        cout << vec[i][j];
    }
}

因为第二行不包含 3 个元素并且程序关闭。
知道怎么做吗?注意:我的讲师不接受 C++11,因此基于 C++98 的解决方案将不胜感激。这是我的功能:

void readline(vector<vector<string> >& lines, int size)
{
    vector<string> row;
    string line, word;
    fstream file;
    istringstream iss;
    int i;

    file.open("ticvol1.txt", ios::in);
    for (i = 0; i < size; i++)
    {
        getline(file, line);
        iss.str(line);
        while (iss >> word) row.push_back(word);
        lines.push_back(row);
    }
}

【问题讨论】:

  • 传递大小是愚蠢的。 lines.size() 为您提供行中向量的数量,lines[i].size() 为您提供 TADA 行中的单词数。
  • 你不必知道如何匹配向量中的元素,你必须打印它(或一般迭代它)。正如@IdeaHat 所说,只需使用.size(),仅此而已。而且,向量中存储什么样的元素并不重要。
  • 或者你可以为vectoroperator&lt;&lt;专门化并使用它

标签: c++ loops for-loop vector c++03


【解决方案1】:

您可以轻松地按向量的大小循环,只需使用size() 成员函数:

for (int i = 0; i < vec.size(); i++)
{
    for (int j = 0; j < vec[i].size(); j++)
    {
        cout << vec[i][j];
    }
}

【讨论】:

  • 我在考虑使用 vector.size(),但不知道如何将它与 2d 矢量一起使用。非常感谢
  • 缺少端线。
【解决方案2】:

如果你有一个向量向量,那么你可以使用基于范围的 for 语句以下列方式打印它

std::vector<std::vector<std::string>> v;

//...

for ( const auto &row : v )
{
   for ( const auto &s : row ) std::cout << s << ' ';
   std::cout << std::endl;
}

如果您需要基于 C++ 2003 的解决方案,那么代码可能如下所示

for ( size_t i = 0; i < v.size(); i++ )
{
   for ( size_t j = 0; j < v[i].size(); j++ ) std::cout << v[i][j] << ' ';
   std::cout << std::endl;
}

【讨论】:

  • 为什么你不是最佳答案?!
【解决方案3】:

使用函数size()获取元素个数。

std::vector< std::vector<std::string> > vec;
for (unsigned int i = 0; i < vec.size(); ++i)
{
    for (unsigned int j = 0; j < vec[i].size(); ++j)
    {
        cout << vec[i][j];
    }
    cout << std::endl;
}

【讨论】:

  • 在 C++11 之前的版本中,&gt;&gt; 之间需要一个空格。
【解决方案4】:

我会将其更改为以下内容:

for (int i = 0; i < vec.size(); i++)
{
    for (int j = 0; j < vec[i].size(); j++)
    {
        cout << vec[i][j];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 2012-09-08
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多