Stringstream 到字符串 return?
Stringstream to string return?
所以我必须编写一个 .dot 文件来制作排序后的 avl 树的 graphviz 图像。提供了方法header,我只好凑合使用了。
主要问题是 build_dot_content() 方法是 std::string 的一部分时如何正确调用它?
void avl::dump_dot(std::string filename){
string s;
ofstream fptr;
fptr.open(filename);
fptr<<"digraph AVL {"<<endl<<"graph [dpi=150];"<<endl<<"nodsep=0.3;"<<endl;
fptr<<"ranksep=0.2;"<<endl<<"margin=0.1"<<endl<<"node [shape = circle fontname=\"Helvetica\"];"<<endl;
fptr<<"edge [arrowsize=0.8]"<<endl<<endl;
stringstream o;
s=string build_dot_content(o, root, 1);
fptr<<s<<endl<<"}"<<endl;
}
std::string build_dot_content(std::stringstream &o, avl_node *e, int i) {
o<<"node"<<i<<" [label =\""<<e->element<<"\"];"<<endl;
int iL = 2*i;
int iR = 2*i+1;
if(e->left != nullptr){
o<<"node"<<i<<" -> node"<<iL<<";"<<endl;
build_dot_content(o, e->left, iL);
}
if(e->right != nullptr){
o<<"node"<<i<<" -> node"<<iR<<";"<<endl;
build_dot_content(o, e->right, iR);
}
string s;
s = o.str();
return s;
}
你需要把这个函数一分为二;
- 与节点一起调用的主函数
i
- 仅流出节点的第二个函数
从根节点调用第一个函数的第二个函数,并在该函数中递归调用自身以流出树。在 main 函数的末尾,从流中生成字符串 return 它..
-- 或者
你的 dump 函数已经有一个流,将它连同节点和索引传递给 build_dot_content
函数,这可以递归地流出元素 - 它不应该 return 字符串。 ..
所以我必须编写一个 .dot 文件来制作排序后的 avl 树的 graphviz 图像。提供了方法header,我只好凑合使用了。
主要问题是 build_dot_content() 方法是 std::string 的一部分时如何正确调用它?
void avl::dump_dot(std::string filename){
string s;
ofstream fptr;
fptr.open(filename);
fptr<<"digraph AVL {"<<endl<<"graph [dpi=150];"<<endl<<"nodsep=0.3;"<<endl;
fptr<<"ranksep=0.2;"<<endl<<"margin=0.1"<<endl<<"node [shape = circle fontname=\"Helvetica\"];"<<endl;
fptr<<"edge [arrowsize=0.8]"<<endl<<endl;
stringstream o;
s=string build_dot_content(o, root, 1);
fptr<<s<<endl<<"}"<<endl;
}
std::string build_dot_content(std::stringstream &o, avl_node *e, int i) {
o<<"node"<<i<<" [label =\""<<e->element<<"\"];"<<endl;
int iL = 2*i;
int iR = 2*i+1;
if(e->left != nullptr){
o<<"node"<<i<<" -> node"<<iL<<";"<<endl;
build_dot_content(o, e->left, iL);
}
if(e->right != nullptr){
o<<"node"<<i<<" -> node"<<iR<<";"<<endl;
build_dot_content(o, e->right, iR);
}
string s;
s = o.str();
return s;
}
你需要把这个函数一分为二;
- 与节点一起调用的主函数
i
- 仅流出节点的第二个函数
从根节点调用第一个函数的第二个函数,并在该函数中递归调用自身以流出树。在 main 函数的末尾,从流中生成字符串 return 它..
-- 或者
你的 dump 函数已经有一个流,将它连同节点和索引传递给 build_dot_content
函数,这可以递归地流出元素 - 它不应该 return 字符串。 ..