如何增长一个动态的char指针数组(在C++中)?

zeb*_*man 0 c++ pointers dynamic char

我正在尝试使用一系列char指针.
假设我动态地声明这样的数组:

int numrows=100;  
char** array = new char*[numrows];  
Run Code Online (Sandbox Code Playgroud)

然后我通过使用getline从文件中获取字符串,将字符串转换为char数组,然后在我的数组中设置指针指向所述char数组来填充它,如下所示:

string entry;  
int i=0;
while (getline(file,entry)){  
  char* cstring = new char[entry.length()];  
  array[i]=strncpy(cstring,entry.c_str(),entry.length());  
  free(cstring);  
  i++;  
}
Run Code Online (Sandbox Code Playgroud)

(这有效,但是有更好的方法吗?)
问题是,一旦我变得大于numrows,我不知道如何增长数组.我知道如何为一维数组做这个,但是二维性让我失望.

我想我应该能够像增长一维阵列一样成长它,对吗?

if (i==numrows){  
  char** temp = new char*[numrows+numrows];  
  for (int j=0;j<i;j++){  
    char* cstring = new char[strlen(array[i])];  
    temp[i]=strncpy(cstrin,array[i],strlen(array[i]));  
    free(cstring);
  }
  delete [] array;
  array = temp;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果当前数组变满,则创建第二个数组,该数组的大小是当前数组的两倍,并用当前数组的内容填充它.然后删除数组,让数组指向temp.我很高兴让temp成为新阵列.我可以将数组的内容转换为temp,但是当我删除数组并设置array = temp时,数组的内容不是temp的内容.

所以我的问题是我怎样才能/应该发展这个动态数组的char指针?

pm1*_*100 7

使用std :: vector - 这是你的朋友

 std::vector<std::string> arr;
 while(getline(file, entry))
   {
       arr.push_back(entry);
  }
Run Code Online (Sandbox Code Playgroud)

DONE

可以使用带自定义比较的矢量排序来完成排序

 bool less3(const std::string &s1, const std::string &s2)
 {
      return s1.compare(0, 3, s2, 0, 3) == 0;
 }

 std::sort(arr.begin(), arr.end(), less3);
Run Code Online (Sandbox Code Playgroud)

我敢打赌,less3可以提高效率,但可读性会赢,除非你真的受苦

编辑固定根据gman的好评