Простой способ хранить элементы указателя структуры внутри структуры в векторе - PullRequest
1 голос
/ 15 апреля 2019

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

Я знаю, как поместить Input_Data в массив P_LU[i].Fixture_Type[j] как показано ниже.Но я бы хотел переместить значение, хранящееся в массиве P_LU[i].Fixture_Type[j], в вектор.

Это часть моего кода моделирования.

/*Input_Data
3
3 1 4 4
3 1 5 1
3 1 5 1
*/

struct  Struct_Order {
int Part_No;
int Due_Date;
int Part_Type;
int Pallet;
};

struct Struct_Pallet {
int Pallet_No;
int *Fixture_Type;
Struct_Order *Part;
};



// pallets with fixture types at LU station
  P_LU = new Struct_Pallet[N_Pallet_LU];
  for (int i = 0; i < N_Pallet_LU; i++)
  {
     int N_Fixture_LU;
     fin >> N_Fixture_LU;

     P_LU[i].Pallet_No = i; 
     P_LU[i].Fixture_Type = new int[N_Fixture_LU];

        for (int j = 0; j < N_Fixture_LU; j++)
        {
           fin >> temp_fixture_type; 
           P_LU[i].Fixture_Type[j] = temp_fixture_type;
        }
}

======> Вопрос.Я хочу поместить int *Fixture_Type Struct_Order *Part в вектор типа Struct_Pallet, а не в массив.

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

1 Ответ

0 голосов
/ 15 апреля 2019

Вместо того чтобы использовать указатели и брать на себя ответственность за отслеживание размеров, выделение памяти, освобождение памяти и т. Д., Вы можете использовать std :: vector , который будет обрабатывать всю эту сложность для вас:

#include <vector>

struct Order {
    int part_no;
    int due_date;
    int part_type;
    int pallet;
};

struct Pallet {
    int pallet_no;
    std::vector<int> fixture_types;
    std::vector<Order> parts;
};

Вот пример кода, созданного с использованием кода, который вы используете в OP

Live Demo

int main()
{
    int num_pallets = 0;
    std::cin >> num_pallets;

    std::vector<Pallet> pallets;
    pallets.reserve(num_pallets);
    for (int i = 0; i < num_pallets; ++i)
    {
        Pallet next_pallet;
        next_pallet.pallet_no = i; 

        int num_fixture_types = 0;
        std::cin >> num_fixture_types;

        next_pallet.fixture_types.reserve(num_fixture_types);
        for (int j = 0; j < num_fixture_types; j++)
        {
            int temp_fixture_type = 0;
            std::cin >> temp_fixture_type; 
            next_pallet.fixture_types.push_back(temp_fixture_type);
        }
        pallets.push_back(std::move(next_pallet));
    }

    for (const Pallet& next_pallet : pallets)
    {
        std::cout << "Pallet: " << next_pallet.pallet_no << std::endl;
        std::cout << "Fixture types:\n\t";
        for (int fixture_type : next_pallet.fixture_types)
            std::cout << fixture_type << " ";
        std::cout << std::endl;
    }
}

Ввод:

3
3 1 4 4
3 1 5 1
3 1 5 1

Выход:

Pallet: 0
Fixture types:
    1 4 4 
Pallet: 1
Fixture types:
    1 5 1 
Pallet: 2
Fixture types:
    1 5 1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...