C++函数来填充一个 std::vector 基于另一个 std::vector 的内容?

C++ function to fill a std::vector based on another std::vector's contents?

本文关键字:vector std 另一个 函数 C++ 一个 填充      更新时间:2023-10-16

我有:

struct menuitem {
  std::string Text;
  // …
};
std::vector<menuitem> ItemList;
// populate ItemList…
std::vector<size_t> TextSizeList;

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

我可以这样做:

TextSizeList.reserve(ItemList.size());
for (const item& Item : ItemList)
  TextSizeList.push_back(Item.Text.size());

但我想知道是否有一个std::功能来实现这一点,像std::generate,但Generator采取参数,和一个额外的OutputIterator ?沿着以下行:

void std::foo(InputIterator first, InputIterator last, OutputIterator out, Generator gen);

可以这样使用:

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

你所说的std::foo就是std::transform + std::back_inserter

std::transform(ItemList.begin(), ItemList.end(), std::back_inserter(TextSizeList), 
  [](const menuitem& Item) { return Item.Text.size(); });
相关文章: