为了避免可变的容器/状态,我目前想知道从某些输入构建const
STL容器最接近的事情是什么。
const vector<int> input = {2, 13, 7, 1};
我想做的是这样的事情:
const auto transformed = generate_from<vector<string>>(
input.begin(), input.end(), to_string);
do_something(transformed);
虽然您发现的方法最多是创建一个可变对象并对其进行修改(我希望避免):
vector<string> bad_mutable_container;
for (const auto & elem : input) {
bad_mutable_container.push_back(to_string(input[elem]));
};
do_something(bad_mutable_container);
C++11和更新版本提供了std::generate
和std::generate_n
,但它们操作的对象是可变的,因此它们不能解决我的问题:
vector<string> bad_mutable_container(input.size());
generate_n(bad_mutable_container.begin(), input.size(), [&input, n=0] () mutable {
return to_string(input[n++]);
});
现在您可以做的是将该代码封装在一个函数/lambda中,它为您提供了一致性,但也提供了嘈杂的样板代码:
const auto transformed = [&input] {
vector<string> bad_mutable_container;
for (const auto & elem : input) {
bad_mutable_container.push_back(to_string(elem));
};
return bad_mutable_container;
} ();
do_something(transformed);
我希望至少为std::vector
找到一些构造函数,我可以这样使用:
const auto transformed = vector<string>(input.size(), [&input, n=0] () mutable {
return to_string(input[n++]);
});
什么是当今最现代的C++ish方法,为什么?
发布于 2018-06-19 02:38:03
发布于 2018-06-19 07:04:51
https://stackoverflow.com/questions/50925928
复制相似问题