You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++函数式编程:如何对多个vector批量调用clear()?

一行代码批量调用多个对象的成员函数

假设有若干vector<int>对象v1、v2、v3,目前需要逐个调用它们的clear()方法:

#include <vector>

std::vector<int> v1;
std::vector<int> v2;
std::vector<int> v3;

v1.clear();
v2.clear();
v3.clear();

能不能用一行代码实现批量调用?期望的实现形式类似:

someHOF(clear(), ls[v1, v2, v3]);

当然可以,下面给你几种实用的实现方式:

1. 自定义可变参数模板函数(最贴近你的期望形式)

自己实现一个高阶函数,接收成员函数指针和多个对象,批量调用:

#include <vector>
#include <utility>

// 自定义的someHOF,命名为apply更直观
template<typename MemFunc, typename... Objects>
void apply(MemFunc func, Objects&&... objs) {
    // C++17折叠表达式展开参数包,逐个调用成员函数
    ( (std::forward<Objects>(objs).*func)(), ... );
}

int main() {
    std::vector<int> v1, v2, v3;
    // 调用方式完全符合你的需求逻辑
    apply(&std::vector<int>::clear, v1, v2, v3);
}

2. 用std::for_each+初始化列表快速实现

不需要写模板函数,用标准库工具就能搞定:

#include <vector>
#include <algorithm>

int main() {
    std::vector<int> v1, v2, v3;
    // 用指针初始化列表避免拷贝vector,效率更高
    std::for_each({&v1, &v2, &v3}, [](auto vec_ptr) { vec_ptr->clear(); });
}

3. C++20及以上的简化写法

如果你的编译器支持C++20,还可以用范围for直接遍历引用的初始化列表:

#include <vector>
#include <functional> // for std::ref

int main() {
    std::vector<int> v1, v2, v3;
    for (auto& vec : {std::ref(v1), std::ref(v2), std::ref(v3)}) {
        vec.clear();
    }
}

内容的提问来源于stack exchange,提问作者Gera

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:25:24