我知道如何在C ++中创建动态字符串数组:
string* array = new string[10];
但是如何在C ++中创建动态字符串的动态数组呢?我的意思是一个包含string*
个对象的动态数组。我如何初始化每个动态字符串?
答案 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;
}