forloop,迭代器和向量不与我合作

Joh*_*son 1 c++ iterator vector

为什么这对我来说很好:

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

虽然这不是:

 for(vector<int>::iterator it = vec.begin(); it < vec.end(); it++)
    {
        os << vec[*it] << " ";
    }
Run Code Online (Sandbox Code Playgroud)

cni*_*tar 10

您应该打印*it而不是使用它作为索引,您应该将条件更改为it != vec.end().

  • 不同之处在于`it!= v.end()`适用于所有容器类型,因为`==`是为所有迭代器类型定义的.`<`仅为随机访问迭代器定义; 它在这里工作,因为`vector`的迭代器是随机访问.它不适用于`list`. (6认同)
  • 虽然结束条件是正确的*我不建议使用它,而是更惯用的`it!= vec.end()`.与`<`的比较仅适用于随机访问迭代器,而相等的测试适用于任何迭代器. (4认同)
  • 但是条件没有任何问题 (2认同)

Luc*_*ore 5

你使用的迭代器错了,它应该是:

for(vector<int>::iterator it = vec.begin(); it < vec.end(); it++)
{
    os << *it << " ";
}
Run Code Online (Sandbox Code Playgroud)

您的代码只是尝试在索引处打印元素*it,这甚至可能无效.