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

如何修改C++类的setTrainSet函数以支持直接传入vector变量

问题分析与解决

首先明确:你现有的setTrainSet函数本来就支持直接传入vector变量,比如testNet.setTrainSet(vector);——只要vector是std::vector<std::vector<double>>类型,直接调用即可,不需要修改函数。

你当前的调用写法存在语法错误:std::vector<std::vector<double>>() = { ... }试图给临时对象赋值,这不符合C++语法规范。

如果想要同时支持直接传入初始化列表(不用显式构造vector),可以给setTrainSet添加一个重载版本:

// 原有的const引用版本,支持传入已有变量
void setTrainSet(const std::vector<std::vector<double>>& trainSet) {
    this->trainSet = trainSet;
}

// 新增的初始化列表重载,支持直接传{}形式的数据
void setTrainSet(std::initializer_list<std::initializer_list<double>> initList) {
    this->trainSet.assign(initList.begin(), initList.end());
}

修改后两种调用方式都能正常工作:

  1. 传入已有变量:
std::vector<std::vector<double>> myVector = {{1.0,1.0,0.73}, ...};
testNet.setTrainSet(myVector);
  1. 直接传入初始化列表:
testNet.setTrainSet({
    {1.0, 1.0, 0.73}, {1.0, 1.0, 0.81}, {1.0, 1.0, 0.86},
    {1.0, 1.0, 0.95}, {1.0, 0.0, 0.45}, {1.0, 1.0, 0.70},
    {1.0, 0.0, 0.51}, {1.0, 1.0, 0.89}, {1.0, 1.0, 0.79}, {1.0, 0.0, 0.54}
});

如果你不想新增重载,也可以修正原有的调用方式,直接用初始化列表构造临时对象(去掉错误的赋值操作):

testNet.setTrainSet(std::vector<std::vector<double>>{
    {1.0, 1.0, 0.73}, {1.0, 1.0, 0.81}, {1.0, 1.0, 0.86},
    {1.0, 1.0, 0.95}, {1.0, 0.0, 0.45}, {1.0, 1.0, 0.70},
    {1.0, 0.0, 0.51}, {1.0, 1.0, 0.89}, {1.0, 1.0, 0.79}, {1.0, 0.0, 0.54}
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 08:30:52