gpt4 book ai didi

c++ - 从 ProtoBuf RepeatedField 获取所有元素的最有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:24:24 24 4
gpt4 key购买 nike

我已经将一组 float 序列化为 RepeatedField使用 Google 的 Protcol Buffers。

反序列化数据时,我使用另一个设置类以更适合我的游戏类的形式保存信息。静态 CreateFrom 方法提取并转换数据。

class VoxelTerrainSettings
{
public:
std::vector<int> indices;
btAlignedObjectArray<btVector3> vertices;

VoxelTerrainSettings(void);
~VoxelTerrainSettings(void);

static VoxelTerrainSettings CreateFrom(const VoxelTerrainProtoBuf::VoxelTerrainSettings &settings)
{
VoxelTerrainSettings s;

int numIndices = settings.indices().size();

s.indices.reserve(numIndices);

for (int i = 0; i < numIndices; ++i)
{
s.indices.push_back(settings.indices().Get(i));
}

int numVertices = settings.vertices().size();

s.vertices.reserve(numVertices);

int v = 0;

for (int i = 0; i < numVertices; ++i)
{
s.vertices.push_back(btVector3(settings.vertices().Get(v++), settings.vertices().Get(v++), settings.vertices().Get(v++)));
}

return s;
}

//VoxelTerrain Load();
};

但是,目前从RepeatedField中提取所有元素的方法似乎不是很优雅。

我试过采用一种更有效的方法,但它们都抛出了超出范围的错误。

std::copy(settings.vertices().begin(), settings.vertices().end(), vv.begin());
std::copy(&settings.vertices().Get(0), &settings.vertices().Get(settings.vertices().size() - 1), &vv[0]);

我可以使用哪些方法来提高元素提取的效率?

最佳答案

std::copy 使用 std::front_inserter/std::back_inserter 迭代器类型将值插入容器尝试以下操作:

// inserting into list/deque
std::copy(settings.vertices().begin(), settings.vertices().end(), std::front_inserter(vv));
// inserting into vector
std::copy(settings.vertices().begin(), settings.vertices().end(), std::back_inserter(vv));

关于c++ - 从 ProtoBuf RepeatedField 获取所有元素的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com