我对向量和配对的流运算符进行了如下重载:
template <typename T>
double get_average(vector<T> v) {
return accumulate(v.begin(), v.end(), 0) / (double)v.size();
}
//allows one to print out all elements of a vector using cout
template <typename T>
std::ostream &operator<<(std::ostream &out, const std::vector<T> &v)
{
if (!v.empty())
{
out << "[";
std::copy(v.begin(), v.end(), std::ostream_iterator<T>(out, ", "));
out << "\b\b]";
}
else
{
out << "[]";
}
return out;
}
template <typename P, typename S>
ostream &operator<<(ostream &os, const pair<P, S> &v)
{
os << "(";
os << v.first << ", " << v.second << ")";
return os;
}
但是,当我尝试使用cout如下打印成对的向量时:
pair<int, int> p(1, 1);
cout << p << endl;
v.push_back(p);
cout << v;
会产生以下错误消息:
/ usr / include / c ++ / 7 / bits / stream_iterator.h:199:13:错误:没有匹配项 ‘operator <<’(操作数类型为‘std :: ostream_iterator,char,std :: char_traits> :: ostream_type {aka std :: basic_ostream}”和“ const std :: pair”)
* _M_stream << __value;
这是为什么?