C++ 向量操作优化
Posted
技术标签:
【中文标题】C++ 向量操作优化【英文标题】:C++ vector manipulation optimization 【发布时间】:2009-07-16 18:17:29 【问题描述】:我正在尝试优化下面的代码,以避免复制和粘贴,只需正确使用 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 浮点 [6] 变量)?提前致谢。
【问题讨论】:
【参考方案1】:尝试一个向量的向量:
std::vector<std::vector<float> > ed;
ed.push_back(std::vector<float>(6, 0.0f));
在这种情况下,我正在推送一个浮点临时向量,其中包含 6 个值为 0.0f 的元素;
Info on vector's constructors.
【讨论】:
【参考方案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];
如果您愿意,您还可以在课堂上做更多事情。如果您希望避免复制,只需在复制构造函数中制作类的浅拷贝即可。
【讨论】:
【参考方案3】:为了可以存储在向量中,类型必须是可复制和可分配的,而 C 样式的数组两者都不是。您应该改用另一个向量,或者可能将数组包装在结构中。
【讨论】:
使用另一个向量和将数组包装在一个结构中(这就是我已经在做的)有什么区别? 包装后的数组可能会更快,但灵活性较差 - 例如,您无法找到数组中实际有多少东西。 我不能使用 sizeof(array)/sizeof(element) 找出数组中有多少元素吗? 在很多情况下这根本行不通。如果它这样做了,它只会告诉你数组的大小,而不是它包含多少实际值。 在清洁度方面,第一种方法是否提供更好的可读性?以上是关于C++ 向量操作优化的主要内容,如果未能解决你的问题,请参考以下文章