STL名称为"map"函数编程函数

Pau*_*han 31 c++ map-function

我希望能够写出类似的东西

char f(char);
vector<char> bar;
vector<char> foo = map(f, bar);
Run Code Online (Sandbox Code Playgroud)

transform函数似乎相似,但它不会自动生成结果集合的大小.

Ara*_*raK 39

您可以使用std::back_inserter<iterator>,虽然在前面提供尺寸更高效.例如:

string str = "hello world!", result;
transform(str.begin(), str.end(), back_inserter(result), ::toupper);
// result == "HELLO WORLD!"
Run Code Online (Sandbox Code Playgroud)

  • +1 - 您可以使用`std :: vector <t> :: reserve`来消除效率损失. (8认同)

ein*_*ica 12

在C++ 11标准生效之前就已经提出了这个问题......现在我们已经std::transform()将(丑陋)等效于函数式编程"map"了.以下是如何使用它:

auto f(char) -> char; // or if you like: char f(char)
vector<char> bar;
vector<char> foo;
// ... initialize bar somehow ...
std::transform(bar.begin(), bar.end(), std::back_inserter(foo), f);
Run Code Online (Sandbox Code Playgroud)