将结构内的结构指针成员存储到向量中的简单方法

时间:2019-04-15 15:15:17

标签: c++ vector visual-studio-2017

我正在执行调度模拟。如果有人认识我一种将结构内的结构指针变量存储到向量中并打印出来以进行检查的简便方法,我将非常感激。

我知道如何将Input_Data放入数组P_LU[i].Fixture_Type[j]中,如下所示。但我想将存储在数组P_LU[i].Fixture_Type[j]中的值移到Vector。

这是我的仿真代码的一部分。

/*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类型的vector中,而不是数组中。

我不知道我的意图是否得到了实现。如果您需要更多说明,请给我评论。

1 个答案:

答案 0 :(得分:0)

您可以使用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