gpt4 book ai didi

c++ - 如何使用标准 STL 算法从 istream 填充 std::vector

转载 作者:行者123 更新时间:2023-11-30 00:48:48 26 4
gpt4 key购买 nike

有一个旧的遗留代码填充来自 istream 的 vector , vector 中的对象在 ctor 中接受带有原始数据的字符串。

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;
}

MyClass only ctor 看起来像:

MyClass(const std::string& data);

你有没有看到一些方法来避免写运算符>>或任何其他函数并使用一些(?)标准算法来用刚刚构造的对象填充容器?可能是用 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); });

关于c++ - 如何使用标准 STL 算法从 istream 填充 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com