Каков наилучший способ позволить пользователю определять размер массива в моем классе вместо фиксированной переменной, в данном случае 8

Это мой код

#include <iostream>
using namespace std;

class array
{
private:
    int arr[8];
    int max;
    int min;
public:
    void get_arr();
    void maxmin();
    void display();
};

void array::get_arr()
{
    int size;
    cout << "How many elements would you like to enter?";
    cin >> size;
    cout << "Enter elements: " << endl;
    for (int i = 0; i < size; i++)
    {
        cin >> arr[i];
    }
    max = arr[0];
    min = arr[0];
}

void array::maxmin()
{
    for (int i = 0; i < 8; i++)
    {
        if (max < arr[i])
        {
            max = arr[i];
        }
        if (min > arr[i])
        {
            min = arr[i];
        }
    }
}

void array::display()
{
    cout << "Largest is " << max;
    cout << "Smallest is " << min;
}

int main()
{
    array obj;
    obj.get_arr();
    obj.maxmin();
    obj.display();
}

Код, который у меня есть, компилируется и работает правильно. Однако я новичок в использовании классов и работаю над примерами таких проблем, чтобы привыкнуть к форматированию кода таким образом. Я ищу указатели на то, как наиболее эффективно отформатировать мой код, чтобы взять введенную пользователем переменную «size» для массива и реализовать ее в моих функциях.

Может быть, просто использовать std::vector?

πάντα ῥεῖ 18.12.2018 00:21

Получите обзор здесь: обзор кода

Martin York 18.12.2018 00:24

Если вам не нужен std::vector, поищите new и delete. Также поищите правило трех и копировать и менять идиомы, так как они имеют решающее значение для правильной работы с new / delete.

HolyBlackCat 18.12.2018 00:25

Копирование и свопинг не имеют решающего значения, но, черт возьми, это облегчает задачу.

user4581301 18.12.2018 00:25

Чтобы уточнить: у вас есть рабочий код с массивом фиксированного размера. Теперь вы хотите изменить существующий код, чтобы пользователь мог указывать размер?

user4581301 18.12.2018 00:29

@ user4581301 правильно.

Mason penguin Holder 18.12.2018 00:31

Мейсон, мне пришлось попросить у вас разъяснений, чтобы подтвердить мои подозрения. Хотя я не голосовал против, я не буду винить того, кто сделал это, за то, что он списал вопрос и перешел к более четкому вопросу. Я рекомендую вам переформулировать вопрос, чтобы ваша цель была кристально ясной.

user4581301 18.12.2018 00:36

@ user4581301 Я обновил свой заглавный вопрос, чтобы уточнить.

Mason penguin Holder 18.12.2018 00:42

Спасибо. Самый эффективный способ сделать это, как предлагает πάνταῥεῖ: использовать std::vector вместо массива. Если это запрещено ограничением назначения, следующим лучшим вариантом будет притвориться, что это 1992 год, и выполнить предложения HolyBlackCat.

user4581301 18.12.2018 00:45

@MasonpenguinHolder, вы предпочитаете реализовать вектор самостоятельно, чтобы узнать, как это сделать, не так ли?

bruno 18.12.2018 00:48

@bruno Я знаю, как использовать векторы, но мне не терпится хранить свои массивы, ха-ха. Если вы хотите опубликовать «векторный код» ниже, не стесняйтесь, если кто-то в будущем будет искать эту ветку, он может найти ее полезной для своих целей.

Mason penguin Holder 18.12.2018 00:51

Вы можете использовать шаблонный класс для параметризации массива с помощью целочисленного параметра времени компиляции (в стандартной библиотеке есть класс array, который делает это для C++ 11 или 14, я не могу вспомнить какой); или вы можете использовать std::vector для определения размера массива во время выполнения.

President James K. Polk 18.12.2018 01:51

Чтобы уточнить, голоса указывают на общую полезность для будущих читателей, что может быть несколько субъективным. Вот почему мы собираем голоса всего сообщества. Это своего рода демократия.

Passer By 18.12.2018 04:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
13
56
1

Ответы 1

Я не тестирую. Попробуй :)

class vector
{
private:
    std::vector<int> myvector;
    int max;
    int min;
public:
    void set_arr();
    void maxmin();
    void display();
};
void array::set_arr() // (set_arr not get_arr)
{

  int myint;
  int size;

  std::cout << "How many elements would you like to enter?";
  cin >> size;

  for(int i=0,i<size;i++){
    std::cin >> myint;
    this->myvector.push_back (myint);
  }

}

// используйте this-> myvector.size (), чтобы найти max и min

Другие вопросы по теме