使用cpp中的迭代器迭代一行2d向量矩阵

时间:2014-01-24 07:17:14

标签: c++ vector iterator

这是否有迭代器?

for (vector<string>:: const_iterator it = vector.begin(); it != vector.end(); ++it)
{
    cout << *it << endl;
}

这是一个常规矩阵。

for (vector<vector<string>>:: const_iterator it = vector.begin(); it != vector.end(); ++it)
{
    cout << *it << endl;
}

会像这样的工作,还是我必须做其他事情?

1 个答案:

答案 0 :(得分:0)

你的“2D矩阵”只是矢量的矢量。迭代它时,每个迭代器都指向一个向量。这并不奇怪。没有理由期望迭代器对向量的元素在这里表现不同。

在您的情况下,您必须提供流式传输字符串向量的代码。这部分不起作用

cout << *it << endl;

在您的第二个示例中,因为ostream& operator<<没有std::vector<std::string>

另请注意,除非明确允许,否则不允许为标准库类型重载std命名空间运算符,但您可以提供执行此操作的函数:

void streamStuff(std::ostream& o, const std::vector<std::string>>& v)
{
  for (const auto& s : v)
    o << s << " ";
}

然后

for (vector<vector<string>>::const_iterator it = vector.begin(); it != vector.end(); ++it)
{
    streamStuff(std::cout, *it);
    cout << endl;
}