[C++]传递节点的索引还是节点本身更好?哪个更快?

[C++]It's better to pass the index of a node or the node itself? Which is faster?

本文关键字:节点 更好 C++ 索引      更新时间:2023-10-16

哪种方法更快?这

int bfs( nodo& s ){....

还是这个?

int bfs( int index ){....

其中nodo是这个结构:

struct nodo{
  int valore;
  vector<int> vic;
  vector<int> nodiEntranti;
  vector<int> disprezzati;
  vector<int> rivali;
  int dt;
  int ft;
  bool visited; 
  nodo(){
        visited=false;
        valore= -1;
        dt=0;
        ft=0;
  }
};

我有这样的结构:

vector<nodo> graph;

p.S:我需要调用这个函数20万次。

它可能不会有太大变化。

原因是您通过引用传递结构体,即传递结构体的内存地址,而不是整个结构体。这与向节点传递整数索引在性能上应该没有太大区别。

std::vector对象上使用运算符[]是一个函数调用,因此,每次使用第一个版本的bsf(int index)都会导致在函数内部调用运算符[]。如果您可以以某种方式缓存一个节点引用,并在多次调用bsf(node &)时重用它,那么您可能会看到后者的性能略有提高。

这将取决于您对它所做的操作。如果您传递索引,则需要额外的(尽管很小)步骤来获取引用;但如果你需要访问它的邻居,拥有索引可以更快地访问。

一句话:正如@taocp所建议的那样,对其进行简介并亲自查看。