作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经将一棵树序列化为一个文件 (myFile.txt),其中每个节点实际上是一个单独的 \n
终止行:
根节点 00节点 000|节点 001||节点 01节点 010|节点 011节点 0110节点 01100||||节点 02节点 020节点 0200|节点 0201||||
它可以被反序列化为一个预定义深度的数组,如下所示:
#include <afx.h>
#include <memory>
using std::unique_ptr;
// A node of an N-ary tree
struct Node {
CString key;
unique_ptr<Node> child[N]; // Array of pointers for N children
};
// Utility function to create a new N-ary tree node
unique_ptr<Node> newNode(CString key)
{
unique_ptr<Node> temp = std::make_unique<Node>();
temp->key = key;
return temp;
}
int deSerialize(unique_ptr<Node>& root, CStdioFile* pfr)
{
// Read next item from file.
CString fs;
pfr->ReadString(fs);
// If no more items or next item is marker, return 1 to indicate same
if (fs == "" || fs == "|") { return 1; }
// else create new node and recurse for all its children
root = newNode(fs);
for (int i = 0; ; i++) // cond-expression omitted, break governs exit
if (deSerialize(root->child[i], pfr))
break;
// Finally return 0 for successful finish
return 0;
}
int main()
{
FILE* f;
errno_t err = _tfopen_s(&f, _T("myFile.txt"), _T("rt, ccs = UTF-16LE"));
if (err != NULL) { TRACE("Could not open file"); return 0; }
CStdioFile fr(f);
CStdioFile* pfr = &fr;
unique_ptr<Node> root1 = NULL;
deSerialize(root1, pfr);
fr.Close();
}
但是当我尝试从使用数组更改为 vector 时,它第一次尝试在 if
语句中递归时,deSerialize
函数抛出异常,因为 vector 下标超出范围。
#include <afx.h>
#include <memory>
#include <vector>
using std::vector;
using std::unique_ptr;
// A node of a general tree
struct Node {
CString key;
vector<unique_ptr<Node>> child; // A vector of pointers for children
};
我该如何解决?
最佳答案
[...] throws an exception because the vector subscript is out of range.
你想为 N
个 child 构建你的 vector
:
vector<unique_ptr<Node>> child(N);
将构造一个大小为 N
的 vector
,其中包含 N
默认构造的 unique_ptr
。
关于c++ - 如何将一般树反序列化为 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59059234/
我是一名优秀的程序员,十分优秀!