这是初始化向量的坏方法吗?

时间:2017-11-26 22:59:21

标签: c++

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;

1 个答案:

答案 0 :(得分:4)

没有

由于软件不允许我停下来,我会详细说明。 “否”仅适用于该问题。我没有检查代码是否有错误。所以,不,将结果以书面形式返回是没有错的。不涉及任何费用。任何现代编译器都将使用return-value optimization来返回结果。

使用operator new会非常糟糕。这样做会将删除对象的负担放在调用函数上。搜索“C ++ RAII”。