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

如何避免代码重复,对矩阵行和列执行相同的有效性检查?

问题描述

用户经常处理二维矩阵,需要检查行和列的有效性(有效性判定规则一致,具体定义无需关注),之前会编写两个重复的工具函数:

bool check_rows_valid() {
  for (int i = 0; i < NUM_ROWS; ++i) {
    // 检查第i行的有效性,逻辑取决于具体规则
  }
}

bool check_cols_valid() {
  for (int j = 0; j < NUM_COLS; ++j) {
    // 检查第j列的有效性,逻辑与行检查完全一致
  }
}

由于行和列的检查逻辑大量重复,希望用单个工具函数同时实现行和列的有效性检查。

优化方案

核心思路是抽象遍历维度与元素获取逻辑,将行/列的通用检查逻辑抽离为独立模块,仅通过参数区分行和列的遍历方式,彻底消除代码重复。

步骤1:定义维度枚举(可选)

用枚举明确区分行/列检查类型,提高代码可读性:

enum class CheckDimension { ROW, COLUMN };

步骤2:抽离核心有效性检查逻辑

把行/列共有的检查逻辑单独封装成函数,接收一个获取序列元素的方式(比如lambda),避免重复编写检查规则:

// 示例:检查序列元素是否唯一(根据实际需求替换为你的有效性规则)
bool is_sequence_valid(const std::function<int(int)>& get_element, int seq_length) {
    std::unordered_set<int> seen;
    for (int k = 0; k < seq_length; ++k) {
        int val = get_element(k);
        if (seen.count(val)) {
            return false;
        }
        seen.insert(val);
    }
    return true;
}

步骤3:编写通用检查函数

通过维度参数控制遍历范围和元素获取方式,复用核心检查逻辑:

bool check_valid(CheckDimension dim) {
    // 确定要遍历的行/列数量,以及每个序列的长度
    int traverse_count = (dim == CheckDimension::ROW) ? NUM_ROWS : NUM_COLS;
    int seq_length = (dim == CheckDimension::ROW) ? NUM_COLS : NUM_ROWS;

    for (int i = 0; i < traverse_count; ++i) {
        // 根据维度,用lambda动态获取序列中的第k个元素
        if (!is_sequence_valid([&](int k) {
            return (dim == CheckDimension::ROW) ? mat[i][k] : mat[k][i];
        }, seq_length)) {
            return false;
        }
    }
    return true;
}

使用方式

需要检查行有效性时调用:

check_valid(CheckDimension::ROW);

需要检查列有效性时调用:

check_valid(CheckDimension::COLUMN);

额外优化

如果不想用枚举,也可以用布尔参数简化(比如bool check_valid(bool check_rows)),但枚举的可读性更强,更适合长期维护。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:05:58