如果我有一个C set和迭代器:
set<Person> personList; set<Person>::const_iterator location;
如何打印出套装内容?它们都是人物对象,我重载了运算符<<为人. 错误在基本for循环中的行:
cout << location
Netbeans给出:
proj.cpp:78: error: no match for ‘operator<<’ in ‘std::cout << location’
看起来它想要迭代器的运算符<<的重载. 基本上,我正在使用以数组格式存储的对象,但现在是一组.什么是相同的cout<<数组[i]用于集合?
解决方法
在C 11中,为什么在使用foreach循环时使用for循环?
#include <iostream> //for std::cout void foo() { for (Person const& person : personList) { std::cout << person << ' '; } }
在C 98/03中,为什么在使用算法时使用for循环呢?
#include <iterator> //for std::ostream_iterator #include <algorithm> //for std::copy #include <iostream> //for std::cout void foo() { std::copy( personList.begin(),personList.end(),std::ostream_iterator(std::cout," ") ); }
请注意,这适用于任何迭代器对,而不仅仅是来自std :: set< t>的迭代器. std :: copy将使用您的用户定义的运算符<<使用此单个语句打印出集合中的每个项目.