C ++矢量操作优化

时间:2009-07-16 18:17:30

标签: c++ vector

我正在尝试优化下面的代码,以避免必须复制和粘贴,只需正确使用SlaveForce和SlavePos,它们是float [6]类型,baseForce和basePos是矢量类型:

typedef struct _NodeCoord
{
    float coords[6];
} NodeCoord;

int main()
{
    ...
    memcpy(tempNodeCoord.coords, SlaveForce, 6*sizeof(float));
    baseForce.push_back(tempNodeCoord);
    memcpy(tempNodeCoord.coords, SlavePos, 6*sizeof(float));
    basePos.push_back(tempNodeCoord);
    ...
}

我尝试了一些测试代码。只有这看起来有效:

std::vector<NodeCoord> tallon;
NodeCoord m;
memset(m.coords, 0, sizeof(m.coords));
tallon.push_back(m);

虽然这与我想要完成的事情相符,但它不起作用:

std::vector<float[6]> ed;
float e[6];
tallon.push_back(e);

我也试过写一个“typedef float [6] mytype;”在main函数之前的行,但它也不能正常工作。有什么办法可以消除memcpy函数调用(或者直接push_back float [6]变量)吗?提前谢谢。

3 个答案:

答案 0 :(得分:2)

尝试矢量矢量:

std::vector<std::vector<float> > ed;

ed.push_back(std::vector<float>(6, 0.0f));

在这种情况下,我正在推动一个浮点数的临时向量,其中6个元素的值为0.0f;

Info on vector's constructors

答案 1 :(得分:2)

这是c ++,为什么不尝试上课?

class NodeCoord { 
public:
    float coords[6];
    NodeCoord() {memset(coords, 0, sizeof(coords));};
    ~NodeCoord() {};
};

std::vector<NodeCoord> tallon;
tallon.push_back(NodeCoord());

cout << tallon.front().coords[0];

如果你选择的话,你可以在课堂上做更多的事情。如果您希望避免复制,只需在复制构造函数中创建类的浅表副本。

答案 2 :(得分:1)

为了可以在向量中存储,类型必须是可复制和可分配的,而C类型的数组都不是。您应该使用另一个向量,或者可能将数组包装在结构中。

相关问题