我有一个需要打印出来的二维字符串向量。整个程序应从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);
}
}
答案 0 :(得分:5)
您可以按照其大小轻松遍历矢量,只需使用size()
成员函数:
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
cout << vec[i][j];
}
}
答案 1 :(得分:5)
如果您有矢量矢量,那么您可以使用基于声明的范围
以下列方式打印它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;
}
答案 2 :(得分: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;
}
答案 3 :(得分:1)
我会将其更改为以下内容:
for (int i = 0; i < vec.size(); i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
cout << vec[i][j];
}
}