#include <iostream>
#include <iterator>
#include <string>
#include <vector>
#include <fstream>
#include <algorithm>
using namespace std;
int main()
{
istream_iterator <string> is(cin);
istream_iterator <string> eof;
vector<string> text;
copy(is, eof, back_inserter(text));
sort(text.begin(),text.end());
ostream_iterator <string> os(cout, " ");
copy(text.begin(),text.end(),os);
return 0;
}
另外可以对文件进行操作
ifstream in_file("in.txt"); //这里就相当于UNIX里的fopen函数,打开一个文件流
ofstream out_file("in.txt");
istream_iterator<string> is(in_file);
istream_iterator<string> eof;
vector<string> text;
copy(is, eof, back_inserter(text));
sort(text.begin(), text.end());
ostream_iterator<string> os(out_file, " ");
copy(text.begin(), text.end(), os);
另外在做第一段代码的测试时候遇到一个问题,就是没有办法终止cin输入
可以用ctrl+z或者F6
另外在论坛里看到了解决的办法
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <functional>
#include <iomanip> //noskipws定义于其中
using namespace std;
// 这个copy_if_not跟你的copy_break_at()完全一样
template <class InputIterator, class OutputIterator, class Pred>
void copy_if_not(InputIterator ifirst, InputIterator ilast,
OutputIterator ofirst, Pred pred)
{
while ( ifirst != ilast && !pred(*ifirst))
*ofirst++ = *ifirst++;
}
int main()
{
vector<char> cv;
cin >> noskipws; // 注意这里
istream_iterator<char> is(cin), es;
copy_if_not(is, es, back_inserter(cv), bind2nd(equal_to<char>(), '\n'));
//也可以用
// copy_if(is, es, back_inserter(cv), bind2nd(not_equal_to<char>(), '\n'));
cout << "End of input" << endl << "Now output:" << endl;
copy(cv.begin(), cv.end(), ostream_iterator<char>(cout));
return 0;
}
不忽略空格和换行的输入,另外在遇到换行符时,结束读取输入