C++ 如何初始化char*[]数组? intmain(){ int n; cin>>n; char*str[40]; str=new char[10000][40];//我不知道如何初始化这个数组 地图系统; int i,j; //解决问题4C@Codeforces 对于(i=0;i>str[i]; } 对于(i=0;ifirst,str[i])==0){ 计数=++iter->秒; } 否则如果(strcmp(str[i],iter->first)>0){ 打破 } } 如果(计数=0){ 系统[str[i]]=1; 库特

C++ 如何初始化char*[]数组? intmain(){ int n; cin>>n; char*str[40]; str=new char[10000][40];//我不知道如何初始化这个数组 地图系统; int i,j; //解决问题4C@Codeforces 对于(i=0;i>str[i]; } 对于(i=0;ifirst,str[i])==0){ 计数=++iter->秒; } 否则如果(strcmp(str[i],iter->first)>0){ 打破 } } 如果(计数=0){ 系统[str[i]]=1; 库特,c++,arrays,C++,Arrays,str是一个数组。您可以为数组中的值赋值,但数组本身无法赋值。您可能正在尝试执行以下操作: char *str[40]; str=new char [10000][40]; //I don't know how to initialize this array 这不会带来任何好处。一个std::map会根据键的值来比较键。因此: std::map<char*,int> system; 你认为这里的find()会找到这个元素吗?当然不会,因为它是一个不同的指针值 虽然使用原始指针作

str
是一个数组。您可以为数组中的值赋值,但数组本身无法赋值。您可能正在尝试执行以下操作:

char *str[40];
str=new char [10000][40]; //I don't know how to initialize this array
这不会带来任何好处。一个
std::map
会根据键的值来比较键。因此:

std::map<char*,int> system;
你认为这里的
find()
会找到这个元素吗?当然不会,因为它是一个不同的指针值

虽然使用原始指针作为键的映射是有效的C++,但如何正确使用它们却不是很明显。


总之,你应该花更多的时间研究和学习如何使用各种容器。在这里,应该使用
std::vector
,而不是用
new
delete
。并且应该使用
std::string
而不是
char*
作为映射键。你会惊讶地了解到最后的结果结果会更小,更容易阅读和理解。

所以你不喜欢
std::string
那么;-)?你的代码现在像漏勺一样泄漏。为什么不使用
std::vectorv(40)
?在
std::map
中使用指针作为键通常不是您想要做的。为什么不使用
std::vector
std::string
?不再需要像1969年那样编程了。我习惯于char[]因为我的中学教育了我,我最近刚转移到C++。也许我忽略了使用String和Vector的好处。
char *str[40];

for (size_t i=0; i<40; ++i)
   str[i]=new char [10000];
std::map<char*,int> system;
char *foo1=new char[40];

strcpy(foo1, "foo");

system[foo1]=0;

char *foo2=new char[40];

strcpy(foo2, "foo");

auto iter=system.find(foo2);