无法直接输出 STL 矢量的迭代器值
Can't directly output STL Vector's iterator values
在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<_迭代器,_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给你带来的成功猜测。
相关文章:
- 自定义 STL 兼容迭代器,用于迭代 2D 数组类的列
- "迭代器"和"const_iterator"不是 STL 容器的必需成员?
- 没有 STL 容器的迭代器
- 为什么某些 STL 容器(堆栈、队列、优先级队列)不支持迭代器?
- 迭代器 STL C++是模板、类还是接口?
- 为什么我们不在 STL 的迭代器中传递星号(*)
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 如何在C++中重新实现包含指针的 STL 容器的类的迭代器
- C++如何获取传递给函数(STL 迭代器)的参数的名称
- 迭代器和 STL 容器的关系
- C++ 中 STL 中迭代器的大小(以字节为单位)是多少
- 如何将 stl 迭代器与特征一起使用?
- 用于 STL 迭代器、指针和 std::nullptr_t 的模板函数
- 在 stl 容器包装器中定义迭代器类型
- 在多个 STL 对对象上创建迭代器
- 如何为获取 stl 容器迭代器的函数提供函数签名?
- 在 stl 算法中移动迭代器
- lower_bound 在 C++ STL 中返回迭代器,即使元素不存在也是如此.如何避免这种情况?
- 并行STL插入迭代器,例如std :: back_insert_iterator
- STL 迭代器继承:"value_type"不命名类型