Я не знаком с C++, из моего понимания Я думал, что если я передам адрес вектора в вызове функции, например fun(vector<int>&v)
, то значения не будут скопированы в новый вектор int и любые сделанные изменения отразятся обратно, и если в случае fun(vector<int> v)
значения будут скопированы.Передача справки в C++
Но при чтении 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, без использования «&» Это похоже на то, что происходит в Java т.е. ссылка скопирована? Где я ошибался, понимая это?
Массив не является вектором. Они ведут себя по-другому. Вы сравниваете яблоки с апельсинами. – NathanOliver
Чтобы добавить к утверждению @NathanOliver: вы не можете передавать массивы по значению. Вообще. Вы передаете указатель на первый элемент. –
Спасибо! Я понял, что сравниваю массивы с векторами. –