二维向量打印

5
我有一个需要打印的二维字符串向量。整个程序应该从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中向量的数量,lines[i].size()给出了行中单词的数量。TADA。 - IdeaHat
你不需要知道如何匹配向量中的元素,只需像@IdeaHat所说的那样使用.size()来打印它(或者一般地迭代它),这就是全部。而且,存储在向量中的元素种类并不重要。 - user2556165
或者您可以为vector编写operator<<专门化并使用它。 - user2556165
4个回答

17

通过使用size()成员函数,您可以轻松地根据向量的大小循环遍历它:

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

我在考虑使用vector.size(),但不知道如何在二维向量中使用它。非常感谢。 - eilchner
1
缺少换行符。 - JobHunter69

10

如果您有一个向量的向量,那么可以使用基于范围的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;
}

1
为什么你不是最佳答案?! - Romero Azzalini

4
使用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;
}

1
在 C++11 之前的版本中,>> 之间需要加上空格。 - Jarod42

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

我会将其改为以下内容:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接