Страницы

Поиск по вопросам

воскресенье, 31 марта 2019 г.

C++ - передача массива в функцию

Есть несколько функций, которые принимают в качестве параметра массив целых чисел.
#include
using namespace std;
// нахождение наибольшего целого числа в массиве int FindLargest(int arr[]) { int largest = arr[0]; for (int i = 1; i < arr.size(); i++) { if ( arr[i] > largest) { largest = arr[i]; } }
return largest; }
// содержатся ли в массиве повторяющиеся элементы bool ContainsDuplicates(int arr[]) { for (int i = 0; i < arr.size(); i++) { for(int j = 0; j < arr.size(); j++) { if (i != j) { if (arr[i] == arr[j]) return true; } } }
return false; }
// содержатся ли в массиве повторяющиеся элементы (ver 2.0) bool ContainsDuplicates2(int arr[]) { for (int i = 0; i < (arr.size() - 1); i++) { for (int j = i + 1; j < arr.size(); j++) { if (arr[i] == arr[j]) return true; } }
return false; }
int main() {
}
Компилятор выводит следующие ошибки. Не могу понять в чем они заключаются.
C:\Users\saibo>gcc algorithms.cpp algorithms.cpp: In function 'int FindLargest(int*)': algorithms.cpp:21:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 1; i < arr.size(); i++) ^~~~ algorithms.cpp: In function 'bool ContainsDuplicates(int*)': algorithms.cpp:34:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 0; i < arr.size(); i++) ^~~~ algorithms.cpp:36:26: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for(int j = 0; j < arr.size(); j++) ^~~~ algorithms.cpp: In function 'bool ContainsDuplicates2(int*)': algorithms.cpp:50:27: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int i = 0; i < (arr.size() - 1); i++) ^~~~ algorithms.cpp:52:31: error: request for member 'max_size' in 'arr', which is of non-class type 'int*' for (int j = i + 1; j < arr.size(); j++) ^~~~
Может пишу что-то не так. Буду рад подсказке!


Ответ

arr в int FindLargest(int arr[]) - это не массив, а указатель. (При попытке создать параметр-массив, он автоматически превращается в указатель.)
Указатель не знает размер массива, на который указывает. Вам нужно передавать размер массива как отдельный параметр. (Скажем, int FindLargest(int arr[], int size).)
И вообще, может применяться только к классам. Ни массивы, ни указатели не являются классами, так что .size() никак не мог сработать.

Или, можно вообще отказаться от массивов и использовать std::vector. Вот на них .size() работает.

Комментариев нет:

Отправить комментарий