const
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++]);
});
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++]);
});