gpt4 book ai didi

c++ - C/C++ 运行时多维动态数组

转载 作者:行者123 更新时间:2023-11-28 06:09:40 24 4
gpt4 key购买 nike

我有以下结构:

typedef struct _DynamicArray {
int *data = nullptr;
_DynamicArray *ptr_next = nullptr;
_DynamicArray *ptr_dim = nullptr;
} DynamicArray; // so that every matrix cell contains another matrix cell

然后是下面的递归方法:

void _BuildArray(std::string const& source, StringIterator& sit, DynamicArray *dArray, bool& error) {
if (!error) {
while (sit+1 < source.length()) {
++sit;
switch (source[sit]) {
case '[':
dArray->ptr_dim = new DynamicArray();
_BuildArray(source, sit, dArray->ptr_dim, error);
break;
case ']':
return;
case ',':
break;
case ' ':
break;
default:
std::string str;
while (std::isdigit(source[sit])) {
str.push_back(source[sit]);
++sit;
}
--sit;
if (str.empty()) {
error = true;
return;
}
else {
dArray->data = new int(stoi(str));
dArray->ptr_next = new DynamicArray();
dArray = dArray->ptr_next;
}
break;
}
}
}
}

然后如果我将“[[1], 2, [[3,4], 5], [[[]]], [[[6]]], 7, 8, []]”作为一个参数,它构建以下展平:“[1,2,6,7,8]”(而不是“[1,2,3,4,5,6,7,8]”)。为什么?

调用片段是这样的:

StringIterator sit = 0;
bool error = false;
this->dynArray = new DynamicArray();
_BuildArray(this->listString, sit, this->dynArray, error);

最佳答案

一旦您的递归 _BuildArray 调用返回,您就不会像在 default: 情况下那样推进 dArray。这意味着您遇到的下一个 [ 将覆盖前一个 [ 的结果。

关于c++ - C/C++ 运行时多维动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31525936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com