C++函数根据另一个std :: vector的内容填充std :: vector?

eml*_*lai -1 c++ stl vector

这就是我所拥有的:

struct menuitem {
  std::string Text;
  // …
};

std::vector<menuitem> ItemList;
// populate ItemList…
std::vector<size_t> TextSizeList;
Run Code Online (Sandbox Code Playgroud)

现在我需要在ItemList中填写TextSizeList每个Text的长度menuitem...

我能做到这一点:

TextSizeList.reserve(ItemList.size());
for (const item& Item : ItemList)
  TextSizeList.push_back(Item.Text.size());
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有一个std::功能来完成这个,类似std::generate但是带有Generator参数,还有一个额外的OutputIterator?沿着:

void std::foo(InputIterator first, InputIterator last, OutputIterator out, Generator gen);
Run Code Online (Sandbox Code Playgroud)

然后可以像这样使用:

std::foo(ItemList.begin(), ItemList.end(), TextSizeList.begin(),
  [](const menuitem& Item) { return Item.Text.size(); } );
Run Code Online (Sandbox Code Playgroud)

lis*_*rus 9

std::foo你所谈论的正是std::transform+ std::back_inserter.

std::transform(ItemList.begin(), ItemList.end(), std::back_inserter(TextSizeList), 
  [](const menuitem& Item) { return Item.Text.size(); });
Run Code Online (Sandbox Code Playgroud)