myTemplate
问题:https://leetcode.com/problems/binary-tree-level-order-traversal/description/
上面是返回向量>。
的函数但是,由于我将矢量初始化为局部变量vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode *> que;
if (root != nullptr) {
que.emplace(root);
}
while (!que.empty()) {
vector<int> level;
int size = que.size();
for (int i = 0; i < size; i++) {
auto *front = que.front();
que.pop();
level.emplace_back(front->val);
if (front->left != nullptr) {
que.emplace(front->left);
}
if (front->right != nullptr) {
que.emplace(front->right);
}
}
result.emplace_back(move(level));
}
return result;
}
,这是否意味着我返回它是一种代码味道?
由于向量是一个局部变量,它被分配在堆栈上,当这个函数调用结束时,向量将被销毁。
我应该这样做而不是vector<vector<int>> result;
答案 0 :(得分:4)
没有
由于软件不允许我停下来,我会详细说明。 “否”仅适用于该问题。我没有检查代码是否有错误。所以,不,将结果以书面形式返回是没有错的。不涉及任何费用。任何现代编译器都将使用return-value optimization来返回结果。
使用operator new会非常糟糕。这样做会将删除对象的负担放在调用函数上。搜索“C ++ RAII”。