Man*_*uel 28
编辑:这同样的伎俩已经发表别人在以前的线程.
你可以很容易地std::istream_iterator做你想做的事情:
namespace detail
{
class Line : std::string
{
friend std::istream & operator>>(std::istream & is, Line & line)
{
return std::getline(is, line);
}
};
}
template<class OutIt>
void read_lines(std::istream& is, OutIt dest)
{
typedef std::istream_iterator<detail::Line> InIt;
std::copy(InIt(is), InIt(), dest);
}
int main()
{
std::vector<std::string> v;
read_lines(std::cin, std::back_inserter(v));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*lia 22
标准库不提供迭代器来执行此操作(虽然您可以自己实现类似的东西),但您可以简单地使用getline 函数(而不是istream方法)从输入流读取整行到C++字符串.
例:
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
ifstream is("test.txt");
string str;
while(getline(is, str))
{
cout<<str<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案.该例程在每行末尾用@@打印输入文件.
#include <iostream>
#include <iterator>
#include <fstream>
#include <string>
using namespace std;
class line : public string {};
std::istream &operator>>(std::istream &is, line &l)
{
std::getline(is, l);
return is;
}
int main()
{
std::ifstream inputFile("input.txt");
istream_iterator<line> begin(inputFile);
istream_iterator<line> end;
for(istream_iterator<line> it = begin; it != end; ++it)
{
cout << *it << "@@\n";
}
getchar();
}
Run Code Online (Sandbox Code Playgroud)
编辑:曼努埃尔的速度更快.