Se eu tivesse que adivinhar, diria que você tem experiência em Java. Isso é C ++ e as coisas são passadas por valor, a menos que você especifique de outra forma usando o &
operador-(observe que esse operador também é usado como o operador 'endereço de', mas em um contexto diferente). Tudo isso está bem documentado, mas vou reiterar de qualquer maneira:
void foo(vector<int> bar); // by value
void foo(vector<int> &bar); // by reference (non-const, so modifiable inside foo)
void foo(vector<int> const &bar); // by const-reference
Você também pode escolher passar um ponteiro para um vetor ( void foo(vector<int> *bar)
), mas a menos que saiba o que está fazendo e sinta que este é realmente o caminho a percorrer, não faça isso.
Além disso, vetores não são iguais a matrizes! Internamente, o vetor mantém registro de uma matriz da qual ele lida com o gerenciamento de memória para você, mas o mesmo acontece com muitos outros contêineres STL. Você não pode passar um vetor para uma função esperando um ponteiro ou array ou vice-versa (você pode obter acesso (ponteiro para) ao array subjacente e usar isso, entretanto). Vetores são classes que oferecem muitas funcionalidades por meio de suas funções-membro, enquanto ponteiros e arrays são tipos embutidos. Além disso, os vetores são alocados dinamicamente (o que significa que o tamanho pode ser determinado e alterado em tempo de execução), enquanto as matrizes de estilo C são alocadas estaticamente (seu tamanho é constante e deve ser conhecido em tempo de compilação), limitando seu uso.
Eu sugiro que você leia um pouco mais sobre C ++ em geral (especificamente decay de array ) e, em seguida, dê uma olhada no seguinte programa que ilustra a diferença entre arrays e ponteiros:
void foo1(int *arr) { cout << sizeof(arr) << '\n'; }
void foo2(int arr[]) { cout << sizeof(arr) << '\n'; }
void foo3(int arr[10]) { cout << sizeof(arr) << '\n'; }
void foo4(int (&arr)[10]) { cout << sizeof(arr) << '\n'; }
int main()
{
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
foo1(arr);
foo2(arr);
foo3(arr);
foo4(arr);
}