Поменять массивы на std::vector
Нужно заменить в коде массивы на динамические списки, как это сделать?
#include <iostream>
#include <iomanip>
#include <stdlib.h>
typedef struct
{
int currentAccountPayer; //Плательщик текущего счета
int currentAccountRecipient; //Получатель текущего счета
int sendAmount; //Сумма перевода
} ORDER;
using namespace std;
int main()
{ setlocale(LC_ALL, "Russian");
const int ORDER_COUNT=3; // Количество записей
ORDER array[ORDER_COUNT];
for (int i = 0; i < ORDER_COUNT; i++) {
cout << "Расчётный счёт плательщика номер [" << i+1 << "]: ";
cin >> array[i].currentAccountPayer;// Массив плательщиков
cout << "Расчётный счёт получателя номер [" << i+1 << "] : ";
cin >> array[i].currentAccountRecipient;// Массив получателей
cout << "Перевод на сумму: ";
cin >> array[i].sendAmount;// Массив переводов
}
// Массив сортировки
int min;
for (int i = 0; i < ORDER_COUNT - 1; i++) {
min = i;
for (int j = i + 1; j < ORDER_COUNT; j++) {
if (array[min].currentAccountPayer > array[j].currentAccountPayer) {
min = j;
}
}
if (min != i) {
std::swap(array[min], array[i]);// Сортировка записей
}
}
// Вывод на экран
cout << endl;
cout << " Расчётный счёт плательщика \t| Расчётный счёт получателя \t| Сумма перевода" << endl;
cout << " _______________________________________________________________________________" << endl;
for (int i = 0; i < ORDER_COUNT; i++) {
cout << " " << array[i].currentAccountPayer << " \t\t\t| " << array[i].currentAccountRecipient << " \t\t\t| " << array[i].sendAmount << endl;
}
cout << endl;
// Поиск плательщика
cout << "Вывод информации о переведённых средствах:" << endl << endl;
while (true) {
cout << "Введите счет плательщика (OR q TO EXIT): ";
char input_payer[20];
cin >> input_payer;
if (input_payer[0] == 'q' && input_payer[1] == '\0') {
return 0;
}
// Обработка исключительной ситуации
int is_valid = 1;
for (int i = 0; i < 20; i++) {
if (input_payer[i] == '\0') {
break;
}
if (!isdigit(input_payer[i])) {
cout << "Расчётный счёт плательщика " << input_payer << " не найден!" << endl;
is_valid = 0;
break;
}
}
if (is_valid == 0) {
continue;
}
// Поиск плательщика
int is_found = 0;
for (int i = 0; i < ORDER_COUNT; i++) {
if (atoi(input_payer) == array[i].currentAccountPayer) {
is_found = 1;
cout << "Плательщик " << input_payer << " перевёл " << array[i].sendAmount << " rub." << endl;
break;
}
}
if (is_found == 0) {
cout << "Расчётный счёт плательщика " << input_payer << " не найден!" << endl;
}
}
return 0;
}
Ответы (1 шт):
Когда постановка задачи стала ясна, ясно стало и решение. Чтобы заменить массив на std::vector, следует в Вашем коде конструкции вида:
ORDER array[ORDER_COUNT];
заменить на
std::vector<ORDER> array(ORDER_COUNT);
Или, если в общем виде, нужно заменить везде конструкции вида:
тип название_переменной[количество_значений];
на
std::vector<тип> название_переменной(количество_значений);
Обращение к определённым элементам по индексу останется прежним.
Ну и, конечно, не забудьте добавить #include <vector> в начале программы.
Также хочу обратить Ваше внимание на то, что элементы векторов при создании будут заполнены нулевыми значениями, если это вектор значений фундаментального типа, а если передан сложный тип, здесь поведение, как я думаю, не определено. В общем, не забывайте инициализировать, прежде чем использовать. Хотя, если Вы работали с массивами, думаю, Вам это знакомо.