无法直接输出 STL 矢量的迭代器值

Can't directly output STL Vector's iterator values

本文关键字:迭代器 STL 输出      更新时间:2023-10-16

在C++中尝试输出STL迭代器值时遇到问题。以下代码生成一个错误-无论我要使用什么模板目标:

template <typename T>
void outputVector(vector<T> &v)
{
    typename vector<T>::const_iterator iter;
    for(iter = v.begin(); iter != v.end(); iter++)
    {
        cout << *iter << endl;
    }

消息是

不匹配'operator<lt;'在'std::cout<lt;iter__gnucxx::__normal_iterator&lt_迭代器,_Container>::运算符*,其中_Iterator=常量节点*,_Container=std::vector>'

将for循环替换为时

for(iter = v.begin(); iter != v.end(); iter++)
{
    T t = *iter;
    cout << t << endl;
}

一切都很好。

你有什么问题吗?问题可能是什么?使用的类"Node"通过重载了"<<"运算符

ostream & operator<<(ostream &o, Node &n)
{
o << "Hello World" << endl;
return o;
}

您的operator<<未能引用const作为第二个参数:

std::ostream& operator<<(std::ostream& os, MyType& obj);

这意味着临时*iter无法绑定到该参数。


养成在任何不需要修改对象的地方使用const的习惯:

std::ostream& operator<<(std::ostream& os, MyType const& obj);

现在,引用参数可以绑定到临时参数。哈!


这是蓝色和数字42给你带来的成功猜测。