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;
}

你需要把这个函数一分为二;

  1. 与节点一起调用的主函数 i
  2. 仅流出节点的第二个函数

从根节点调用第一个函数的第二个函数,并在该函数中递归调用自身以流出树。在 main 函数的末尾,从流中生成字符串 return 它..

-- 或者

你的 dump 函数已经有一个流,将它连同节点和索引传递给 build_dot_content 函数,这可以递归地流出元素 - 它不应该 return 字符串。 ..