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

44
20 ноября 2018, 13:10

Есть несколько функций, которые принимают в качестве параметра массив целых чисел.

#include <iostream>
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++)
                               ^~~~

Может пишу что-то не так. Буду рад подсказке!

Answer 1

arr в int FindLargest(int arr[]) - это не массив, а указатель. (При попытке создать параметр-массив, он автоматически превращается в указатель.)

Указатель не знает размер массива, на который указывает. Вам нужно передавать размер массива как отдельный параметр. (Скажем, int FindLargest(int arr[], int size).)

И вообще, . может применяться только к классам. Ни массивы, ни указатели не являются классами, так что .size() никак не мог сработать.

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

Answer 2

Это вам не Java какая :), это С++ - при передаче массива надо передавать размер отдельно.

Или пользоваться классами C++ типа vector, array...

READ ALSO
c extern при множественном объявлении

c extern при множественном объявлении

Подскажите, как ведет себя extern в следующей ситуации:

33
Как с нуля поставить cucumber фреймворк?

Как с нуля поставить cucumber фреймворк?

Я начинающий автоматизатор, и мне очень понравился фреймворк cucumber, и хочется самому поставить его у себя дома на ПКМогу писать сценарии и степы...

25
Как изменить панель в зависимости от выбора?

Как изменить панель в зависимости от выбора?

мне нужно сделать что-то типа TreeView, суть в том, что-бы когда пользователь выбирает некий класс менялась основная панель, реализовать всё нужно...

33
Сохранение видеопотока

Сохранение видеопотока

Есть задача - реализовать 2 сервиса, один отдает видеопоток, другой принимает его и записывает на дискВопрос в том, как осуществить соединение...

40