iostream迭代器的ostream问题
#include<iostream>
#include<fstream>
#include<vector>
#include<algorithm>
#include<iterator>
#include<string>
using namespace std;
template<class T,class baseType>
void Show(T &v,baseType r)
{
myostream_iterator<baseType> out(cout," ");
copy(v.begin(),v.end(),out);
cout<<endl;
}
/*ostream& operator << (ostream& os,const vector<string>&vec)
{
vector<string>::const_iterator iter = vec.begin();
while (iter != vec.end())
{
os<<*iter++<<" 0 ";
}
os<<endl;
return os;
}*/
template<class InputIterator, class OutputIterator>
OutputIterator mycopy (InputIterator first, InputIterator last, OutputIterator result)
{
while (first != last) *result++ = *first++;
return result;
}
template<class T>
void Show(T &v)
{
Show(v,v[0]);
}
int main()
{
vector<string> vec(10,"Bosch");
Show(vec);
Show(vec,string(""));
cout<<vec;
vector<vector<string> > dvec(2,vec);
Show(dvec[0],string(""));
Show(*dvec.begin(),string(""));
ostream_iterator< vector<string> > out(cout," ");
vector<string> tes = vec;
//*out<<*dvec.begin();
copy(dvec.begin(),dvec.end(),out);
cout<<"*******************Success*********************"<<endl;
Show(dvec,vec);
}
typedef basic_ostream<char,char_traits<char> > ostream_Type;
///you can see the ostream_Type as ostream.
ostream_Type& operator << (ostream_Type& os,const vector<string>& vec)
{
vector<string>::const_iterator iter = vec.begin();
while (iter != vec.end())
{
os<<(*iter++)<<" ";
}
os<<endl;
return os;
}
template <class T, class charT=char, class traits=char_traits<charT> >
class myostream_iterator :public iterator<output_iterator_tag, void, void, void, void>
{
basic_ostream<charT,traits>* out_stream;
//ostream* out_stream;
const charT* delim;
public:
typedef charT char_type;
typedef traits traits_type;
typedef basic_ostream<charT,traits> ostream_type;
//typedef ostream ostream_type;
myostream_iterator(ostream_type& s) : out_stream(&s), delim(0) {}
myostream_iterator(ostream_type& s, const charT* delimiter)
: out_stream(&s), delim(delimiter) { }
myostream_iterator(const myostream_iterator<T,charT,traits>& x)
: out_stream(x.out_stream), delim(x.delim) {}
~myostream_iterator() {}
myostream_iterator<T,charT,traits>& operator= (const T& value) {
*out_stream << value;
if (delim!=0) *out_stream << delim;
return *this;
}
myostream_iterator<T,charT,traits>& operator*() { return *this; }
myostream_iterator<T,charT,traits>& operator++() { return *this; }
myostream_iterator<T,charT,traits>& operator++(int) { return *this; }
};
#include<iostream>
#include<vector>
#include<string>
using namespace std;
ostream& operator<<(ostream &os, std::vector<std::string> &vec)
{
for (int i = 0; i < vec.size(); ++i)
cout << vec[i] << " ";
return os;
}
int main()
{
std::vector<std::string> vec;
std::string str1 = "aaa";
std::string str2 = "bbb";
vec.push_back(str2);
vec.push_back(str1);
cout << vec << endl;
system("pause");
}