函数传入参数引用和成员变量访问效率的问题
  • 板块学术版
  • 楼主OriL
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/2/5 22:26
  • 上次更新2025/2/6 10:49:30
查看原帖
函数传入参数引用和成员变量访问效率的问题
1489878
OriL楼主2025/2/5 22:26

这是一个求vector int所有组合的函数.

void generateCombinations(const vector<int>& nums, vector<int>& current, int index, vector<vector<int>>& result)

核心的函数是这个. 我的问题是, 如果把这个参数result引用删掉, 换成Solution的成员变量访问, 就是本来generateCombinations准备存储答案的时候, 会放到传进来的 result引用里面. 我现在把这个result入参删除, 换成Solution的成员变量来访问.

程序的执行速度会慢不少. 我请问这个原因是什么?

#include <iostream>
#include <vector>
using namespace std;

// 递归函数,生成所有组合
void generateCombinations(const vector<int>& nums, vector<int>& current, int index, vector<vector<int>>& result) {
    // 将当前组合加入结果集
    result.push_back(current);

    // 从当前索引开始,遍历所有可能的数字
    for (int i = index; i < nums.size(); ++i) {
        // 将当前数字加入组合
        current.push_back(nums[i]);

        // 递归调用,处理下一个数字
        generateCombinations(nums, current, i + 1, result);

        // 回溯:移除当前数字,尝试其他组合
        current.pop_back();
    }
}

// 包装函数,返回所有组合
vector<vector<int>> getAllCombinations(const vector<int>& nums) {
    vector<vector<int>> result;
    vector<int> current;
    generateCombinations(nums, current, 0, result);
    return result;
}

// 测试代码
int main() {
    vector<int> nums = {1, 2, 3};

    // 获取所有组合
    vector<vector<int>> combinations = getAllCombinations(nums);

    // 输出结果
    for (const auto& combo : combinations) {
        for (int num : combo) {
            cout << num << " ";
        }
        cout << endl;
    }

    return 0;
}
2025/2/5 22:26
加载中...