Создание массива структур с данными, введенными пользователем - PullRequest
1 голос
/ 19 октября 2019

У меня есть задание, в котором мне нужно создать программу, которая исследует очереди FIFO. Задача состоит в том, чтобы создать массив, в котором каждый элемент содержит 2 числа x и y. А затем вам нужно иметь методы push, pop и show, которые вставляют новый элемент, удаляют элемент и отображают все текущие элементы в очереди.

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

Моя последняя попытка связана со структурами. Но у меня возникли проблемы с пониманием того, как я буду создавать структуру каждый раз, когда выбрана опция добавления (push) данных. А затем возвращает все значения, которые в данный момент сохранены в массиве структур. Если это даже возможно.

Вот что у меня есть: queue.cpp

#include <iostream>
#include "queue.h"
#include <array>
using namespace std;

queue::queue(){
    int length;
    cout <<"Queue max length: ";
    cin >> length;
    cout <<"\n";

    int array[length];
    capacity = length;
}

void queue::push(){
     struct Coordinates{ //And this whole part wont work either cause I need to create a structure before I can enter data into it. 
//I assume I need to use a for loop in order to createa strcutre everytype the 'push' method is called?
            int x;
            int y;
        }arr[capacity];

for (i = 0; i<capacity; i++){ //Something like this to createa a struct for each array element?

}

    cout << "Please enter the desired values (x, y): ";
    cin >> Coordinates.x >> Coordinates.y;
    cout <<"\n" << "You entered: " <<Coordinates[1]; //This is obviously wrong, I dont actually get how I will print the structures that are saved in the array? And how will I tell the program to assign the values to the first array element, the second, the third etc..?
}

queue.h:

#ifndef QUEUE_H
#define QUEUE_H
#include <iostream>

class queue
{
    public:
        queue();
        virtual ~queue();
        void push();
        void pop();
        void show() const;

    private:
        int capacity;
};

#endif // QUEUE_H 

Я прошу прощения, если это тожеЯ подумал, что если бы я сократил его, это не имело бы смысла.

Ожидаемый конечный результат должен выглядеть следующим образом:

Please enter the size of the queue: 15

What would you like to do? + (positive being they have to enter two new numbers)
Please enter the coordinates to be saved: 5,4

What would you like to do? + (again)
Please enter the coordinates to be saved: 3,5

What would you like to do? * (star being show method)

(Show method) The current Queue is: {5,4}, {3,5};


What would you like to do? - (negative being dequeue)

(Show method) The current Queue is: {3,5};


What would you like to do? + (positive being they have to enter two new numbers)
Please enter the coordinates to be saved: 7,8

(Show method) The current Queue is: {3,5}; {7,8};

And so forth. I hope this explains the end results.

Любые предложения или указания на то, что я делаю неправильно, будуточень признателен. Спасибо.

1 Ответ

0 голосов
/ 20 октября 2019

Вы можете создать метод глобально, а затем использовать его массив в своем классе очереди. Вам не нужно создавать его каждый раз, когда вы вызываете метод push. Создайте приватный итератор внутри класса. А внутри функции push вы можете просто взять ввод и добавить его в итератор no. элемент в массиве Structure.

Например, если вы берете массив struct Coordinates внутри вашего класса и используете целочисленный итератор, i, чтобы отслеживать текущую позицию в массиве, вы можете просто принять ввод, какэто:

cin >> Coordinates[i].x >> Coordinates[i].y, i++;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...