私の理解から、私はfun(vector<int>&v)
のような関数呼び出しでベクタのアドレスを渡す場合、値がintの新しいベクトルにコピーされていないことを考えている私は、Cの++に新しいですし、すべての変更は反映され、fun(vector<int> v)
の場合は値がコピーされます。渡す参照
しかし、this link from geeksfrogeeksを読むと、「&」がなくても、関数内で作成されたベクトルの変更は終了後も保持されることに気付きました。ここ
コードです:、
/* This function prints all nodes that are distance k from a leaf node
path[] --> Store ancestors of a node
visited[] --> Stores true if a node is printed as output. A node may be k
distance away from many leaves, we want to print it once */
void kDistantFromLeafUtil(Node* node, int path[], bool visited[],
int pathLen, int k)
{
// Base case
if (node==NULL) return;
/* append this Node to the path array */
path[pathLen] = node->key;
visited[pathLen] = false;
pathLen++;
/* it's a leaf, so print the ancestor at distance k only
if the ancestor is not already printed */
if (node->left == NULL && node->right == NULL &&
pathLen-k-1 >= 0 && visited[pathLen-k-1] == false)
{
cout << path[pathLen-k-1] << " ";
visited[pathLen-k-1] = true;
return;
}
/* If not leaf node, recur for left and right subtrees */
kDistantFromLeafUtil(node->left, path, visited, pathLen, k);
kDistantFromLeafUtil(node->right, path, visited, pathLen, k);
}
一つの機能によってなさ訪れた配列の変化は、「&」を使用せずに、KDistanceFromLeafUtilへの2回目の呼び出しに表示され、これはJavaのIEで何が起こるかに似です参照はコピーされますか?私はどこでそれを理解するのが間違っていたのですか?
配列は、ベクターはありません。彼らは異なった振る舞いをします。あなたはリンゴとオレンジを比較しています。 – NathanOliver
は@NathanOliver書に追加するには:あなたは値によって配列を渡すことはできません。まったく。あなたは実際に最初の要素へのポインタを渡します。 –
ありがとう!!私はベクトルと配列を比較していることに気付きました。 –