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

repeated google.protobuf.DoubleValue与repeated double的区别及C++操作方法

在C++中操作repeated google.protobuf.DoubleValue的方法

repeated double是原生基本类型的数组,而repeated google.protobuf.DoubleValue是包装类型对象的数组,两者操作逻辑完全不同——你之前直接传1.0给add_num()报错,就是因为add_num()需要的是DoubleValue对象,而非原生double值。

以下是具体的设置与取值方法:

设置值的几种方式

1. 直接通过返回指针设置值

add_num()会返回一个指向新创建的DoubleValue对象的指针,直接调用它的set_value()方法即可:

MathData var;
var.add_num()->set_value(1.0);

2. 构造对象后添加

如果需要先处理DoubleValue对象再加入数组,可以先构造对象、设置值,再通过CopyFrom()添加:

MathData var;
google::protobuf::DoubleValue val;
val.set_value(2.5);
var.add_num()->CopyFrom(val);

3. 修改已有位置的元素

要修改数组中指定位置的元素,用mutable_num(index)获取可修改的指针,再调用set_value():

MathData var;
// 先添加一个元素
var.add_num()->set_value(1.0);
// 修改第0个元素的值为3.14
var.mutable_num(0)->set_value(3.14);

获取值的方法

获取指定位置的值

通过num(index)获取DoubleValue的const引用,再调用value()方法取出原生double值:

MathData var;
var.add_num()->set_value(5.0);
double target_val = var.num(0).value();

遍历所有元素的值

可以用普通for循环或者C++11及以上支持的范围for循环:

MathData var;
var.add_num()->set_value(1.0);
var.add_num()->set_value(2.0);
var.add_num()->set_value(3.0);

// 普通for循环
for (int i = 0; i < var.num_size(); ++i) {
    double val = var.num(i).value();
    // 处理每个val
}

// 范围for循环
for (const auto& dv : var.num()) {
    double val = dv.value();
    // 处理每个val
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 20:35:15