C++动态字符串的动态数组

C++ dynamic array of dynamic strings

本文关键字:动态 数组 字符串 C++      更新时间:2023-10-16

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

string* array = new string[10];

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

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

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.

上面建议的字符串向量将产生更少的心痛

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

您可以扩展该想法以分配任何类型的对象数组类型Tnew T[n] 。如果要创建string*对象的数组,只需使用 new string*[n] 即可。


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


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

简单的示例:)

#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;
}