我正在尝试优化下面的代码,以避免必须复制和粘贴,只需正确使用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]变量)吗?提前谢谢。
答案 0 :(得分:2)
尝试矢量矢量:
std::vector<std::vector<float> > ed;
ed.push_back(std::vector<float>(6, 0.0f));
在这种情况下,我正在推动一个浮点数的临时向量,其中6个元素的值为0.0f;
答案 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类型的数组都不是。您应该使用另一个向量,或者可能将数组包装在结构中。