ÔÚjson-c¿âÖеĺêÊÇÕâÑùµÄ£º
# define json_object_object_foreach(obj,key,val) \ char *key; struct json_object *val; \ for(struct lh_entry *entry = json_object_get_object(obj)->head; ({ if(entry) { key = (char*)entry->k; val = (struct json_object*)entry->v; } ; entry; }); entry = entry->next )½«json´®ÖеÄÐÅÏ¢±£´æµ½Ê÷ÖвÅÊÇ¿ªÊ¼£¬ÐèÒªÖªµÀÔõôÓòÅÊÇÕýµÀ£¬ËùÒÔ˳±ãд¸öÊ÷µÄ±éÀú£¬ÒÔ¼°ÕÒµ½ËùÓмüÖµ¶ÔµÄȫ·¾¶£¬Ç°ÕßÓõݹé»òÕßÕ»À´½â¾ö£¬ºóÕßÓøöÄܹ»¿´µ½Õ»ÖÐÔªËØµÄÕ»£¬ËùÒÔÓÃvectorÀ´Ã°³äһϾͺÃ:
void pre_order(tree_node* cur_root) { if(cur_root) { if(cur_root->node_data->data_type_ == STRDATA) { std::string info = (static_cast<string_type*>(cur_root->node_data))->get_data(); std::cout<<info<<" "; } else if(cur_root->node_data->data_type_ == INTDATA) { int info = (static_cast<int_type*>(cur_root->node_data))->get_data(); std::cout<<info<<" "; } else if(cur_root->node_data->data_type_ == DOUBLEDATA) { double info = (static_cast<int_type*>(cur_root->node_data))->get_data(); } pre_order(cur_root->first_child); pre_order(cur_root->next_sib); } } void pre_order_stack(tree_node* cur_root) { tree_node* temp = cur_root; std::stack<tree_node*> s; while(temp || !s.empty()) { while(temp) { if(temp->node_data->data_type_ == STRDATA) { std::string info = (static_cast<string_type*>(temp->node_data))->get_data(); std::cout<<info<<" "; } else if(temp->node_data->data_type_ == INTDATA) { int info = (static_cast<int_type*>(temp->node_data))->get_data(); std::cout<<info<<" "; } else if(temp->node_data->data_type_ == DOUBLEDATA) { double info = (static_cast<int_type*>(temp->node_data))->get_data(); std::cout<<info<<" "; } s.push(temp); temp = temp->first_child; } temp = s.top(); s.pop(); temp = temp->next_sib; } } pre_order_pwd(tree_node* cur_root) { tree_node* temp = cur_root; std::vector<tree_node*> v; while(temp || !v.empty()) { while(temp) { v.push_back(temp); temp = temp->first_child; } (v.at(v.size()-1)->first_child == NULL) { std::vector<tree_node*>::iterator it; for(it=v.begin(); it!=v.end(); it++) { if((*it)->node_data->data_type_ == STRDATA) { std::string info = (static_cast<string_type*>((*it)->node_data))->get_data(); std::cout<<info<<" "; } else if((*it)->node_data->data_type_ == INTDATA) { int info = (static_cast<int_type*>((*it)->node_data))->get_data(); std::cout<<info<<" "; } else if((*it)->node_data->data_type_ == DOUBLEDATA) { double info = (static_cast<int_type*>((*it)->node_data))->get_data(); std::cout<<info<<" "; } } std::cout<<std::endl; } temp = v.at(v.size()-1); v.pop_back(); temp = temp->next_sib; } }
¡¡