[英]Re-using a vector while not sacrificing elegance
我有以下类定义(节略):
class A {
public:
DigraphNode getBestMove(DigraphNode node) {
nn.clear();
getOutNeighbors(node, nn); // fills nn
...
}
private:
vector<DigraphNode> nn;
Heuristic *heuristic;
}
在原始的非优化版本中,nn曾经在getBestMove方法内声明,而方法本身被声明为const。 但是,重新分配nn花费了很多执行时间。 因此,我决定通过使其成为类成员来在getBestMove的调用之间共享nn。 这样可以加快时间,但是会降低可读性:
-我无法使该方法成为const,因为它修改了nn。
-仅仅为了实现重用而拥有额外的类成员是不对的。
-getOutNeighbors()现在不使用返回向量(需要分配向量来累加结果),而是将向量引用作为参数。
对于我要实现的重用,是否有更好的选择?
编辑:为了澄清,DigraphNode是我为Lemon图库的Digraph :: Node定义的同义词。 我的印象是,这是一个小类型,按值传递节点是完全可以的。
问:我无法使该方法成为常量,因为它修改了nn。
答:您可以将nn声明为mutable
然后该函数仍可以是const。
mutable vector<DigraphNode> nn;
问:-仅拥有一个额外的类成员来实现重用是不对的。
答:它不仅不漂亮,而且也不安全,尤其是在使用多线程的情况下。 似乎nn
应该在调用方处声明为局部变量,并作为函数的参数给出。
像这样的东西:
DigraphNode getBestMove(const DigraphNode& node, vector<DigraphNode>& nn)const{
if (nn.empty()){
//in case you don't want to fill it outside you can do it here.
getOutNeighbors(node, nn); // fills nn
}
....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.