Есть несколько функций, которые принимают в качестве параметра массив целых чисел.
#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() работает.
Комментариев нет:
Отправить комментарий