Jika saya harus menebak, saya akan mengatakan bahwa Anda berasal dari latar belakang Java. Ini adalah C ++, dan hal-hal diteruskan oleh nilai kecuali jika Anda menetapkan sebaliknya menggunakan &-operator (perhatikan bahwa operator ini juga digunakan sebagai operator 'alamat-dari', tetapi dalam konteks yang berbeda). Ini semua terdokumentasi dengan baik, tetapi saya akan mengulangi lagi:
void foo(vector<int> bar);
void foo(vector<int> &bar);
void foo(vector<int> const &bar);
Anda juga dapat memilih untuk meneruskan penunjuk ke vektor ( void foo(vector<int> *bar)), tetapi kecuali Anda tahu apa yang Anda lakukan dan Anda merasa bahwa inilah cara yang tepat, jangan lakukan ini.
Juga, vektor tidak sama dengan array! Secara internal, vektor melacak larik yang menangani manajemen memori untuk Anda, tetapi begitu juga banyak container STL lainnya. Anda tidak dapat meneruskan vektor ke fungsi yang mengharapkan pointer atau array atau sebaliknya (Anda bisa mendapatkan akses ke (pointer ke) array yang mendasari dan menggunakannya). Vektor adalah kelas yang menawarkan banyak fungsi melalui fungsi anggotanya, sedangkan pointer dan array adalah tipe bawaan. Juga, vektor dialokasikan secara dinamis (yang berarti bahwa ukurannya dapat ditentukan dan diubah saat runtime) sedangkan array gaya-C dialokasikan secara statis (ukurannya konstan dan harus diketahui pada waktu kompilasi), membatasi penggunaannya.
Saya sarankan Anda membaca lebih lanjut tentang C ++ secara umum (khususnya peluruhan array ), dan kemudian lihat program berikut yang menggambarkan perbedaan antara array dan pointer:
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);
}