You need to enable JavaScript to run this app. C++中按引用传递Node对象std::vector的addUnique计数异常问题
优惠活动
大模型
产品
解决方案
定价
更多

C++中按引用传递Node对象std::vector的addUnique计数异常问题

计数结果不符的核心问题
  • 根本错误出在addUnique函数的遍历逻辑
    原代码中for (Node used: list) 是值遍历写法,循环里的used是vector中每个Node对象的临时拷贝,并非vector内元素的引用。当匹配到和输入字符一致的baseChar时,执行的used.count++只会修改这个临时拷贝的计数值,原vector里对应的Node对象完全没有被改动,计数累加的操作完全失效,最终表现为不管同一个字符在输入字符串里出现多少次,对应节点的count永远保持初始值1,和预期的累加计数结果完全不符。
    修正方法是将循环变量改为引用类型,让used直接绑定vector内的原对象,修改才能真正生效:
    for (Node& used: list) {
        if (used.baseChar == check) {
            used.count++;
            return;
        }
    }
    
  • 同类写法隐患
    主函数中最终输出节点的循环for (Node node: nodes) 同样是值拷贝遍历。目前因为循环内仅调用display()读取属性,不会影响输出结果,但如果后续要在该循环中修改节点属性,同样会出现修改临时拷贝不生效的问题,建议统一替换为引用遍历写法。
  • 额外代码风险提示
    当前Node类的构造函数没有对composition1、composition2两个指针成员做初始化,后续如果使用这两个指针会触发野指针访问问题,该问题和当前计数逻辑无关,但属于代码隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:27:04