使用 Range-v3(版本 0.10.0)库,我尝试从 std::vector 构造一个范围,将其转换为另一个范围,最后对该范围进行排序。我预计排序步骤会产生另一个我稍后可以使用的范围。但我能想到的最好的办法是:
std::vector<std::string> const input { "2", "3", "1" };
using namespace ranges;
std::vector<int> output = input
| views::transform([](std::string s) { return std::stoi(s); })
| to<std::vector>()
| actions::sort
注意使用to<std::vector>()
在变换步骤之后和排序步骤之前。这似乎分配了一个新的std::vector
当我想要的只是排序时range转换步骤产生的。
为什么没有view::sort
?它非常适合上述范围的组成。
转换后的范围只是一个视图,随着视图的迭代,元素一次生成一个。它无法排序,因为没有地方可以存储排序后的元素。假设的实现也效率低下,因为每次需要进行排序比较时都必须转换每个元素。
您的解决方案是将转换后的元素存储在向量中然后对它们进行排序是正确的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)