将动态结构数组复制到另一个C++中

Copy Dynamic Struct Array into another C++

本文关键字:另一个 C++ 复制 动态 结构 数组      更新时间:2023-10-16

我英语不太好,这就是为什么我的问题可能是错的。但我有一个问题,我不知道如何解决,也不知道是否有可能解决

我定义了2个结构:

typedef struct
{
  UINT16        ScriptNumber;
  std::string   ScriptText;
} StepStruct;

typedef struct
{
  std::string               SequenceName;
  std::string               DisplayName;
  StepStruct                SequenceSteps;
} SequenceStruct;

正如您所看到的,第一个结构是第二个结构的成员。所以我希望两个结构都是动力学的。因此,我从类型StepStruct创建了2个动态数组,从类型SequenceStruct创建了1个动态数组。

StepStructs类型的两个动态阵列定义如下:

StepStruct gsFirstSkript[] =
{    
  { 1 , "SkriptText One"},
  { 2 , "SkriptText Two"},
  { 45, "SkriptText Three"}
}
StepStruct gsSecondSkript[] =
{    
  { 48, "SkriptText One"},
  { 2 , "SkriptText Two"},
  { 45, "SkriptText Three"}
}

到Structs的是StepStruct类型。现在我想对SequenceStruct类型执行相同的操作,但我想将我已经拥有的两个数组分配给结构成员SequenceSteps下的它。我的意思是:

SequenceStruct gsSequenceList[] =
{    
  { "FirstScript", "Test One", gsFirstSkript},
  { "SecondScript", "Test Two", gsSecondSkript}
}

如果我现在想读取成员gsSequenceList,我无法访问其SequenceSteps索引下的任何信息!这意味着数据不会被复制!我试过Pointers但没有成功。

UINT16 lTestVal = gsSequenceList[0].SequenceSteps[2].ScriptNumber;

所以我可以漫画说这是有效的,并且lTestVal包含值45吗?

typedef struct
{
  std::string               SequenceName;
  std::string               DisplayName;
  StepStruct*               SequenceSteps;
} SequenceStruct;

这将允许代码进行编译,并且您所展示的测试片段将起作用。但是,这不会复制数据。如果更改gsFristSkript,它也将在gsSequenceList中更改。如果你想复制数据,你可以显式地这样做,有一个构造函数,或者只使用向量<>。以下是矢量的解决方案:

#include <vector>
...
typedef struct{
  std::string               SequenceName;
  std::string               DisplayName;
  vector<StepStruct>        SequenceSteps;
} SequenceStruct;
vector<StepStruct> gsFirstSkript =
{    
  { 1 , "SkriptText One"},
  { 2 , "SkriptText Two"},
  { 45, "SkriptText Three"}
}
vector<StepStruct> gsSecondSkript =
{    
  { 48, "SkriptText One"},
  { 2 , "SkriptText Two"},
  { 45, "SkriptText Three"}
}
SequenceStruct gsSequenceList[] =
{    
  { "FirstScript", "Test One", gsFirstSkript},
  { "SecondScript", "Test Two", gsSecondSkript}
}
相关文章: