【问题标题】:C++ dynamic array of dynamic strings动态字符串的 C++ 动态数组
【发布时间】:2017-08-27 00:44:48
【问题描述】:

我知道如何在 C++ 中创建动态字符串数组:

string* array = new string[10];

但是如何在 C++ 中创建动态字符串的动态数组?我的意思是一个包含string* 对象的动态数组。以及如何初始化每一个动态字符串?

【问题讨论】:

  • 你没有。由于您已经在使用std::string,请使用std::vector<std::string>
  • 首先,不要调用您的变量array,因为C++ 中已经有一个std::array 类。其次,std::vector<std::string> arr(10); 执行您的代码尝试执行的操作。
  • 您想要一个指向strings 的动态指针数组吗?它看起来像 string ** array = new string*[10]; 后跟一个 for 循环分配 array[index] = new string; 请注意,您可能认为它的用途较少。很有可能,如果这是您认为自己需要的,那么您就走错了方向。让我们谈谈实际目标,也许有人可以给你一个更好的主意。
  • std::string 已经包含一个动态字符串对象,std::vector 包含一个动态数组对象。所以std::vector<std::string>> 实际上做了你想要的。

标签: c++ arrays string memory-management dynamic


【解决方案1】:

我同意,如果您需要实现您的要求,您可能应该重新考虑您的设计。但是,您所要求的语法与字符串数组完全相关:

string** sillyIdea = new string*[10];
//some access examples
sillyIdea[0]= new string;
*(sillyIdea[0]) = "hello";
(*(sillyIdea[0]))[0] = 'H'; 
 sillyIdea[1]= new string;

//statement below looks like a 2d array construct but it is not, 
//just shorthand for  
// *((sillyIdea[1]) + 0)
 sillyIdea[1][0] = "world"; 
//an array of pointers can usually be treated programtcally as a
//jaggedarray(asymtrical multi-dimensional array). In other words,
// your array of string pointers can be treated like an array of one
//element string arrays, making for a cleaner syntax, but worse code.

//in int main(int argc, char** argv), argv is one such example of a jagged array.

上面建议的字符串向量会减少心痛

【讨论】:

    【解决方案2】:

    您已经知道可以使用new string[n] 创建一个string 对象数组。

    您可以扩展该想法以分配任何 类型T: new T[n] 的对象数组。如果你想创建一个string*对象数组,你可以简单地使用new string*[n]


    也就是说,几乎不需要动态分配std::string 的实例。并且几乎不需要手动分配动态数组而不是使用std::vector


    † 有一些限制。使用这种特殊语法,类型必须是默认可构造的。

    【讨论】:

      【解决方案3】:

      简单的例子:)

      #include <iostream>
      using namespace std;
      
      int main() {
          int n, m;
          cin>>n;
          cin>>m;
          string** array = new string*[n];
      
          for(int i = 0; i<n; i++)
          {
              array[i] = new string[m];
          }
      
          for(int i = 0; i<n; i++)
          for(int j = 0; j<n; j++)
          cin>>array[i][j];
      
      
          for(int i = 0; i<n; i++)
          for(int j = 0; j<n; j++)
          cout<<array[i][j]<<endl;
      
      
      
          return 0;
      }
      

      【讨论】:

      • 他的意思是二维数组吗?没问题
      • 不。我认为 OP 想要一个指向strings 的指针数组。不过,想不出一个很好的理由。
      猜你喜欢
      • 1970-01-01
      • 2011-10-21
      • 2012-02-15
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2020-07-31
      • 2022-01-05
      • 2017-03-29
      相关资源
      最近更新 更多