Это мой код
#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
, поищите new
и delete
. Также поищите правило трех и копировать и менять идиомы, так как они имеют решающее значение для правильной работы с new
/ delete
.
Копирование и свопинг не имеют решающего значения, но, черт возьми, это облегчает задачу.
Чтобы уточнить: у вас есть рабочий код с массивом фиксированного размера. Теперь вы хотите изменить существующий код, чтобы пользователь мог указывать размер?
@ user4581301 правильно.
Мейсон, мне пришлось попросить у вас разъяснений, чтобы подтвердить мои подозрения. Хотя я не голосовал против, я не буду винить того, кто сделал это, за то, что он списал вопрос и перешел к более четкому вопросу. Я рекомендую вам переформулировать вопрос, чтобы ваша цель была кристально ясной.
@ user4581301 Я обновил свой заглавный вопрос, чтобы уточнить.
Спасибо. Самый эффективный способ сделать это, как предлагает πάνταῥεῖ: использовать std::vector
вместо массива. Если это запрещено ограничением назначения, следующим лучшим вариантом будет притвориться, что это 1992 год, и выполнить предложения HolyBlackCat.
@MasonpenguinHolder, вы предпочитаете реализовать вектор самостоятельно, чтобы узнать, как это сделать, не так ли?
@bruno Я знаю, как использовать векторы, но мне не терпится хранить свои массивы, ха-ха. Если вы хотите опубликовать «векторный код» ниже, не стесняйтесь, если кто-то в будущем будет искать эту ветку, он может найти ее полезной для своих целей.
Вы можете использовать шаблонный класс для параметризации массива с помощью целочисленного параметра времени компиляции (в стандартной библиотеке есть класс array
, который делает это для C++ 11 или 14, я не могу вспомнить какой); или вы можете использовать std::vector
для определения размера массива во время выполнения.
Чтобы уточнить, голоса указывают на общую полезность для будущих читателей, что может быть несколько субъективным. Вот почему мы собираем голоса всего сообщества. Это своего рода демократия.
Я не тестирую. Попробуй :)
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
Может быть, просто использовать
std::vector
?