二维矢量打印

eil*_*ner 3 c++ vector c++03

我有一个二维字符串向量,我需要打印出来.整个程序应从txt文件中读取一行,将每个单词作为不同的元素存储,然后将"单词向量"推入包含例如100行的向量中.我已经把一切都搞定了,但是当我必须打印矢量时问题出现了.每行可以有不同数量的单词,例如:

我喜欢蛋糕

很多.

所以我不能用:

for (int i = 0; i < 2; i++)
{
    for (int j = 0; j < 3; j++)
    {
        cout << vec[i][j];
    }
}
Run Code Online (Sandbox Code Playgroud)

因为第二行不包含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);
    }
}
Run Code Online (Sandbox Code Playgroud)

0x4*_*2D2 9

您可以通过其大小轻松遍历矢量,只需使用size()成员函数:

for (int i = 0; i < vec.size(); i++)
{
    for (int j = 0; j < vec[i].size(); j++)
    {
        cout << vec[i][j];
    }
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*cow 6

如果您有矢量矢量,那么您可以使用基于范围的语句以下列方式打印它

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

//...

for ( const auto &row : v )
{
   for ( const auto &s : row ) std::cout << s << ' ';
   std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要基于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;
}
Run Code Online (Sandbox Code Playgroud)