繁体   English   中英

在不牺牲美观的同时重新使用向量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM