Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jul 14th, 2012  |  syntax: None  |  size: 2.02 KB  |  hits: 20  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Print vector of vectors to ostream
  2. #include <iterator>
  3. #include <iostream>
  4. #include <string>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. template<typename T>
  9. std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
  10.     using namespace std;
  11.     copy(v.begin(), v.end(), ostream_iterator<T>(os, "n"));
  12.     return os;
  13. }
  14.  
  15. int main() {
  16.     using namespace std;
  17.     vector<string> v1;
  18.     cout << v1;
  19.     vector<vector<string> > v2;
  20.     cout << v2;
  21.     return 0;
  22. }
  23.        
  24. error: cannot bind 'std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >::ostream_type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
  25.        
  26. error: no match for 'operator<<' in '*((std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >*)this)->std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >::_M_stream << __value'
  27.        
  28. void fun(int);
  29.  
  30. namespace Test {
  31.  
  32.   void fun() { fun(3); }
  33.  
  34. }
  35.  
  36. int main() {
  37.     Test::fun();
  38. }
  39.        
  40. template<typename T>
  41. std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
  42.    using namespace std;
  43.    copy(v.begin(), v.end(), ostream_iterator<T>(os, "n"));
  44.    return os;
  45. }
  46.        
  47. template<typename T>
  48. std::ostream &operator <<(std::ostream &os, const std::vector<std::vector<T>> &v) {
  49.    using namespace std;
  50.  
  51.    //NOTE: for some reason std::copy doesn't work here, so I use manual loop
  52.    //copy(v.begin(), v.end(), ostream_iterator<std::vector<T>>(os, "n"));
  53.  
  54.    for(size_t i = 0 ; i < v.size(); ++i)
  55.         os << v[i] << "n";
  56.    return os;
  57. }
  58.        
  59. std::vector<int>  v;
  60. std::vector<std::vector<int>>  vv;
  61. std::vector<std::vector<std::vector<int>>>  vvv;
  62. std::vector<std::vector<std::vector<std::vector<int>>>>  vvvv;
  63.  
  64. std::cout << v << std::endl; //ok
  65. std::cout << vv << std::endl; //ok
  66. std::cout << vvv << std::endl; //ok
  67. std::cout << vvvv << std::endl; //ok
  68.        
  69. template<typename T>
  70. std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
  71.   for(auto const& i : v)
  72.     os << i << "n";
  73.   return os;
  74. }