C++ 如何使用标准stl算法从istream填充std::vector

C++ 如何使用标准stl算法从istream填充std::vector,c++,stl,containers,stl-algorithm,C++,Stl,Containers,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(

有一个旧的遗留代码填充来自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;
}
您是否找到了一些方法来避免写入运算符>>或任何其他函数,并使用一些(?)标准算法来用刚刚构造的对象填充容器?可能要用emplace构造替换容器中的值上的指针


顺便说一句,这个用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); });
使用it\u type=std::istream\u迭代器;
std::transform(it_type{std::cin},it_type{},
std::back_插入器(a),[](const auto&a){返回新的MyClass(a);});

您可以使用
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); });
使用it\u type=std::istream\u迭代器;
std::transform(it_type{std::cin},it_type{},
std::back_插入器(a),[](const auto&a){返回新的MyClass(a);});

C++11/14可以。感谢您提供的解决方案C++11/14还可以。谢谢你的解决方案