Если бы мне пришлось угадывать, я бы сказал, что вы из Java. Это C ++, и все передается по значению, если вы не укажете иное с помощью &
оператора -оператора (обратите внимание, что этот оператор также используется как оператор адресации, но в другом контексте). Все это хорошо задокументировано, но я все равно повторю:
void foo(vector<int> bar);
void foo(vector<int> &bar);
void foo(vector<int> const &bar);
Вы также можете передать указатель на vector ( void foo(vector<int> *bar)
), но если вы не знаете, что делаете, и не чувствуете, что это действительно правильный путь, не делайте этого.
Кроме того, векторы - это не то же самое, что массивы! Внутренне вектор отслеживает массив, управление памятью которого он обрабатывает за вас, как и многие другие контейнеры STL. Вы не можете передать вектор функции, ожидающей указатель или массив, или наоборот (вы можете получить доступ к (указателю) базового массива и использовать его). Векторы - это классы, предлагающие множество функциональных возможностей через свои функции-члены, тогда как указатели и массивы являются встроенными типами. Кроме того, векторы распределяются динамически (что означает, что размер может определяться и изменяться во время выполнения), тогда как массивы в стиле C выделяются статически (его размер постоянен и должен быть известен во время компиляции), что ограничивает их использование.
Я предлагаю вам прочитать еще о C ++ в целом (особенно о распаде массива ), а затем взглянуть на следующую программу, которая иллюстрирует разницу между массивами и указателями:
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);
}