C++ 使用复制显示成对向量

C++ display a vector of pairs by using copy

std::vector<std::pair<Pos, int>> v;
// sort and other stuff...
std::ostream_iterator<std::vector<std::pair<Pos, int>>> out_it(std::cout, "\n");
std::copy(v.begin(), v.end(), out_it); // error

目前正在研究 STL 并尝试使用 copy 打印到控制台。我有一个 operator<< 用于显示对,我应该制作一个用于显示矢量吗?或者还有其他方法吗? Pos只是我定义的一个class,它有一个私有成员字符串。

这会起作用:

#include  <iostream>
#include  <vector>
#include  <iterator>

namespace std {
template <class T1, class T2>
    std::ostream& operator<<(std::ostream& out, const std::pair< T1, T2>& rhs)
    {
      out << "first: " << rhs.first << " second: " << rhs.second;
      return out;
    }
}

int main(){
    std::pair< size_t, int > pp(1,2);
    std::vector<std::pair< size_t, int >> v;
    v.push_back(pp);
    v.push_back(pp);
    v.push_back(pp);

    std::ostream_iterator<std::pair< size_t, int >> out_it(std::cout, "\n");
    std::copy(v.begin(), v.end(), out_it); 
}

std::copy() 从第一个参数给定的值迭代到第二个,使用第三个参数作为目标的迭代器。显然,类型应该匹配。

如果您为向量流定义迭代器,则不需要 std::copy 输出单个向量(应该是 operator<< 的代码?)