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

时间:2017-04-01 22:41:56

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

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

string* array = new string[10];

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

3 个答案:

答案 0 :(得分: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.

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

答案 1 :(得分:0)

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

您可以扩展这个想法,以分配任何类型T的对象数组:new T[n]。如果您希望创建string*个对象数组,只需使用new string*[n]

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

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

答案 2 :(得分:-2)

简单示例:)

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