字符数组的最佳替代品

use*_*854 2 c++ data-structures

我们有一个数据结构

struct MyData
{
       int length ;
       char package[MAX_SIZE];  
};
Run Code Online (Sandbox Code Playgroud)

其中MAX_SIZE是固定值.现在我们想要更改它以支持大于MAX_SIZE的"无限"包长度.建议的解决方案之一是用指针替换静态数组,然后根据我们的要求动态分配大小

struct MyData
{
       int length ;
       char* package;  
};
Run Code Online (Sandbox Code Playgroud)

然后

package = (char*)malloc(SOME_RUNTIME_SIZE) ;
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,这是满足要求的最有效方式还是有任何其他方法......可能使用STL数据结构,如可增长数组等.我们想要一个解决方案,其中大多数适用于静态字符数组的代码也适用于新结构.

Jim*_*y J 7

更好,更好/更安全:

struct my_struct
{
    std::vector<char>package;  
};
Run Code Online (Sandbox Code Playgroud)

调整大小:

my_struct s;
s.package.resize(100);
Run Code Online (Sandbox Code Playgroud)

看看有多大:

my_struct s;
int size = s.package.size();
Run Code Online (Sandbox Code Playgroud)

您甚至可以将函数放在结构中以使其更好:

struct my_struct
{
  std::vector<char>package;  

  void resize(int n) {
    package.resize(n);
  }
  int size() const {
    return package.size();
  }
};

my_struct s;
s.resize(100);
int z = s.size();
Run Code Online (Sandbox Code Playgroud)

在你知道它之前,你正在编写好的代码......