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

Допустим, у меня есть динамически распределенный массив с емкостью 50.

int *myArray = new int[50];

Мне нужно написать функцию calAverage для вычисления среднего значения элементов внутри этого массива.

Не всем индексам присвоено значение.myArray может иметь назначенное значение 0,10 или 50. Я не знаю, сколько или где присваивается значение.

Итак, вот моя функция calAverage:

int calAverage()
{int sum = 0;
 int avg = 0;
 for (int i=0;i<50;i++)
 {
  if (element i is present) {sum+=myArray[i];i++}

 }

Am Iна правильном пути?и, пожалуйста, помогите мне завершить функцию calAverage.

Я не могу использовать вектор или карту, так как это задание, и это не разрешено.Подсказка, которую я получил, состояла в том, чтобы создать параллельный массив и сравнить два, чтобы проверить, назначен ли элемент.ИДК логика того, как это может помочь.

Ответы [ 2 ]

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

Как написали комментарии и ответ от Lightness, вы не можете действительно проверить, было ли элементу присвоено значение.Однако вы сказали, что можете использовать параллельный массив, чтобы помочь вам.Что делать, если вы вместо этого использовали int?Когда вы добавляете значения в массив, увеличиваете счетчик, который вы передаете вместе с массивом.Затем этот счетчик будет содержать «длину» используемой части массива.Может не быть идеальным, но это будет работать.Как то так:

#include <iostream>

double calAverage(int*, int);

int main()
{
    int *myArray = new int[50];
    int myArrLength = 0;
    double avg;


    // add values to array
    for (int i = 0, add = 5; add > i; i++)
    {
        myArray[i] = i;
        myArrLength++;
    }

    avg = calAverage(myArray, myArrLength);

    return 0;
}

double calAverage(int *arr, int len)
{
    int sum = 0;
    for (int i = 0; i < len; i++)
    { 
        sum += arr[i];
    }

    return sum / static_cast<double>(len);
}
0 голосов
/ 03 февраля 2019

Не всем индексам присвоено значение

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

Итак, мы можем сказать, что этим элементам «не было присвоено значение».Но я не собираюсь этого делать по двум причинам:

  1. Вы не можете обнаружить это, и
  2. это не означает, что элементы не существуют.

Это не совсем то же самое, что "не было назначено значение", о котором вы думаете.Итак, я предлагаю вам думать об этом так: все элементы массива существуют, всегда .Вы можете либо использовать какой-либо другой контейнер, в который вы добавляете элементы по требованию, либо выбрать свой собственный способ указать, является ли значение в настоящий момент «действительным» для вашего алгоритма или нет.

Если вы хотитесписок x → y отображений, где x не является смежным, возможно, вам следует рассмотреть вместо std::map (хотя это имеет свои собственные проблемы, а именно то, что оно можетбудь медленнее).Или вы можете использовать какое-то значение часового типа, например -1, если они никогда не будут считаться «реальными» значениями.

...