use*_*893 4 c++ arrays protocol-buffers
我已经连载float数组到RepeatedField使用谷歌的协议型缓冲器.
在反序列化数据时,我使用另一个设置类来为我的游戏类以更合适的形式保存信息.静态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迭代器类型将值插入容器中尝试以下操作:
std::copy(settings.vertices().begin(), settings.vertices().end(), std::front_inserter(vv));
| 归档时间: | 
 | 
| 查看次数: | 9898 次 | 
| 最近记录: |