ami*_*421 1 c++ containers stl stl-algorithm
有一个旧的遗留代码填充istream中的向量,向量中的对象接受带有原始数据的字符串.
typedef std::vector<MyClass*> my_array;
std::istream& operator >> (std::istream& s, my_array& arr) {
if (s) {
std::istream_iterator<std::string> i_iter = s;
for(++i_iter; !s.eof(); arr.push_back(new MyClass(*i_iter++)));
}
return s;
}
Run Code Online (Sandbox Code Playgroud)
MyClass只有ctor的样子:
MyClass(const std::string& data);
Run Code Online (Sandbox Code Playgroud)
你看到一些方法来避免写入操作符>>或任何其他函数,并使用一些(?)标准算法来填充刚刚构造的对象的容器?可能用emplace contructing替换容器中值的指针.
顺便说一句,这个用VC10编译的代码不能正常工作,当我踩到for时看起来像无限循环.然而istream(实际上这是ifstream那里)是一个小文件~200行文本
你可以用std::transform.此代码需要C++ 11,如果这对您不起作用,您可以将lambda更改为工厂方法,并将别名声明更改为typedef:
using it_type = std::istream_iterator<std::string>;
std::transform(it_type{std::cin}, it_type{},
std::back_inserter(a), [](const auto& a) { return new MyClass(a); });
Run Code Online (Sandbox Code Playgroud)