C ++ Как написать функцию для проверки наличия элемента в динамически распределенном массиве - PullRequest
0 голосов
/ 04 февраля 2019

Прежде всего, это назначение, и может использоваться только динамически распределенный массив (не может использовать вектор или карту).Подсказка, которую я получил, состояла в том, чтобы создать другой массив (со всеми элементами, назначенными или нет, я не уверен) и сравнить с исходным массивом.

Итак, исходный массив был динамически размещен с емкостью 50. Я не могу присвоить значения или дать значения по умолчанию для myArray.

int *myArray = new int[50];

Не все элементы присутствуют в каждом индексе,В myArray может быть 0,10 или 50 элементов. Я не знаю, сколько или где представлены элементы. Под "нет" я имел в виду, что элемент с данным индексом не был инициализирован.

Предположим, присутствуют 2 элемента:

myArray [0] = 10;
myArray [1] = 20;

цель состоит в том, чтобы написать функцию bool isPresent (int index) с 3 требованиями:

, если индекс слишкомбольшой (больше 49 в данном случае), вернуть false;

вернуть true, если элемент присутствует в isPresent (int index);

вернуть false, если элемент с указанным индексом отсутствует.

bool isPresent(int 0){}//this should return true
bool isPresent(int 1){}//this should return true
bool isPresent(int 3){}//this should return false
bool isPresent(int 49){}//this should return false
bool isPresent(int 50){}//this should return false

, пожалуйста, помогите мне завершить функцию bool isPresent ().Для второго массива, который я могу создать, чтобы помочь мне, нет требования, как это сделать.Возможно, я могу сделать что-то вроде следующего, но я не уверен, как это может помочь:

int *myArray2 = new int[50];
for (int i = 0; i < 50; i++)
{
    myArray2[i] = 100;//so I'm assigning 100 to every element for myArray2
                      //to compare?
}

Функция bool isPresent () находится в классе массива, который мне нужно написать.Данные тестовые коды (я не могу изменить) в основном.Из main будет создан объект моего класса массива, а для isPresent () из main будут назначены разные элементы.

1 Ответ

0 голосов
/ 04 февраля 2019

У вас есть динамически распределенный массив целых чисел

int* myArray = new int[size]; // where 'size' is the number of the elements in the array

Функция isPresent () должна проверить, присутствует ли значение в данном индексе.

Первое тривиальное решение будетинициализировать по умолчанию все элементы массива следующим образом:

int* myArray = new int[size]();

Так что все элементы в массиве имеют значение по умолчанию 0.

Тогда функция isPresent () должна толькопроверьте, равен ли элемент в массиве по данному индексу 0

if(myArray[index]==0) 
   return false;
return true;

Проблема в этой реализации состоит в том, что мы рассматриваем 0 как флаг, а не значение.Что если пользователь просто хочет поставить 0 на индекс 5?Тогда наш алгоритм просто заявил бы, что в индексе 5 нет элемента, верно?

Другое простое, но наивное решение - выбрать другое значение, а не 0 (возможно, -999) ...но это явно плохое решение по той же причине, которую я объяснил выше, , если ваш массив не должен содержать только положительные значения!

Если использование структур не является проблемой, я предлагаю вамотметьте этот ответ .

...