C++中的引用(257BinaryTreePath)
//例子来自于leetcode257题 BinaryTreePath
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 vector<string> binaryTreePaths(TreeNode* root) { 13 vector<string> result; 14 if(root==NULL){ 15 return result; 16 } 17 DFS(root,"",result); 18 return result; 19 } 20 void DFS(TreeNode* treenode,string tempStr,vector<string>& result){//想要将result的值传出去,需要使用引用。 21 if(treenode->left==NULL&&treenode->right==NULL){ 22 result.push_back(tempStr+to_string(treenode->val));//C++中to_string可以将任意类型转化成string类型 23 } 24 if(treenode->left!=NULL){ 25 DFS(treenode->left,tempStr+to_string(treenode->val)+"->",result); 26 } 27 if(treenode->right!=NULL){ 28 DFS(treenode->right,tempStr+to_string(treenode->val)+"->",result); 29 } 30 31 } 32 33 };
在函数DFS中,参数vector<string>&我们使用引用方式传参,这样在函数中操作的对象就是调用外面的那个对象本身。
如果不写“&”,会产生两个影响:
1.当你想要对这个参数进行修改时,在函数返回后,这个值不会改变。
2.在做参数传递时,不加“&”,在传参过程中,会产生一个临时变量,会造成一定的效率浪费。
在以上代码中,如果不加上&,会使得返回的result结果内容始终为空。
ps:函数声明时,只是告诉编译器存在这个函数,这个时候可以不带参数名称,定义的时候必须实行函数本体,则必须加上参数名称。