这就是我所拥有的:
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)
将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)
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |