var cells = $(this).closest('tr').children('td');
alert(cells.eq(0).text());
//$('#Code').val(cells.eq(0).text());
//$('#ProdName').val(cells.eq(1).text());
在Main函数的某个地方我有STL排序:
class Node{
private:
vector<Node*> children;
public:
vector< Node* > getChildren ();
//or
vector< Node* >& getChildren();
}
如果使用vector&lt; 就会出现问题。节点*&gt; getChildren()代码将有不好的过剩问题,只使用vector&lt;节点*&amp;&amp; getChildren()有效。 我很困惑,为什么只有参考在这种情况下起作用?
答案 0 :(得分:4)
当您没有返回引用时,getChildren
每次调用时都会返回vector
的新副本。
这意味着在这一行:
stl::sort((n->getChildren()).begin(),(n->getChildren()).end(),comp);
第一次调用getChildren
会返回与第二次调用getChildren
不同的副本。这意味着begin()
和end()
位于不同的向量上,因此您永远无法从一个迭代到另一个。
当您返回引用时,两个调用都会返回对同一向量的引用,因此您可以从begin()
迭代到end()
答案 1 :(得分:0)
添加@TheDark所说的内容(对我而言,没有明确说明): 引用返回属于类的实际向量。因此,如果对向量进行修改,则对类和其他函数中的向量进行修改,类将看到更改。
如果您返回副本,则仅对副本进行更改,类和其他功能将不会看到更改。
如果您想在本地对矢量进行排序而不是对类中的矢量进行排序,则需要执行以下操作(由@TheDark提供的原因,为此您可以返回引用或副本):
vector< Node* > localVector = n->getChildren();
stl::sort(localVector.begin(), localVector.end(), comp);