cpp为向量和对定义了流运算符,但是无法打印对的向量?

时间:2019-03-31 21:22:54

标签: c++ vector std-pair

我对向量和配对的流运算符进行了如下重载:

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;

这是为什么?

0 个答案:

没有答案