如何初始化协议缓冲区中的重复元素?

How to initialize a repeated element in protocol buffer?

假设我有这条消息。

message A {
  repeated float w = 1 [packed = true];
}

如何在我的代码中初始化 w?我还能做得更好吗?

a = A()    
for (int i = 0 ; i < n; ++i) 
   a.add_w(0);

a.w() or a.mutable_w() will return a google::protobuf::RepeatedField<float> which provides some additional options.例如,您可以调用 a.mutable_w()->Reserve(n) 提前预分配 space,以避免每次大小加倍时重新分配的通常策略。您还可以使用 Resize(n) 后跟 mutable_data() 来直接访问底层缓冲区,但这可能不会比 Reserve(n) 后跟循环提供太多速度优势。