Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是初始化向量的错误方法吗? vector levelOrder(树节点*根){ 矢量结果; 排队等候; if(root!=nullptr){ 侵位(根); } 而(!que.empty()){ 向量级; int size=que.size(); 对于(int i=0;i瓦尔); 如果(前->左!=nullptr){ que.安放位置(前->左); } 如果(前->右!=nullptr){ que.安放位置(前->右); } } 结果:向后放置(移动(水平)); } 返回结果; }_C++ - Fatal编程技术网

C++ 这是初始化向量的错误方法吗? vector levelOrder(树节点*根){ 矢量结果; 排队等候; if(root!=nullptr){ 侵位(根); } 而(!que.empty()){ 向量级; int size=que.size(); 对于(int i=0;i瓦尔); 如果(前->左!=nullptr){ que.安放位置(前->左); } 如果(前->右!=nullptr){ que.安放位置(前->右); } } 结果:向后放置(移动(水平)); } 返回结果; }

C++ 这是初始化向量的错误方法吗? vector levelOrder(树节点*根){ 矢量结果; 排队等候; if(root!=nullptr){ 侵位(根); } 而(!que.empty()){ 向量级; int size=que.size(); 对于(int i=0;i瓦尔); 如果(前->左!=nullptr){ que.安放位置(前->左); } 如果(前->右!=nullptr){ que.安放位置(前->右); } } 结果:向后放置(移动(水平)); } 返回结果; },c++,C++,问题: 上面是返回向量>的函数 但是,由于我将向量初始化为局部变量向量结果这是否意味着对我来说返回它是一种代码气味 因为向量是一个局部变量,所以它被分配到堆栈上,当这个函数调用结束时,向量将被销毁 我是否应该改为这样做auto results=new vector否 由于软件不允许我就此止步,我将详细说明。“否”只适用于该问题。我没有检查代码是否有错误。因此,不,以书面形式返回结果并没有错。不涉及任何费用。任何现代编译器都将使用它返回结果 使用新操作符是非常糟糕的形式。这样做会使调用函数承担删除

问题:

上面是返回向量>的函数

但是,由于我将向量初始化为局部变量
向量结果这是否意味着对我来说返回它是一种代码气味

因为向量是一个局部变量,所以它被分配到堆栈上,当这个函数调用结束时,向量将被销毁

我是否应该改为这样做
auto results=new vector

由于软件不允许我就此止步,我将详细说明。“否”只适用于该问题。我没有检查代码是否有错误。因此,不,以书面形式返回结果并没有错。不涉及任何费用。任何现代编译器都将使用它返回结果


使用新操作符是非常糟糕的形式。这样做会使调用函数承担删除对象的负担。搜索“C++RAII”。

由于软件不允许我就此止步,我将详细说明。“否”只适用于该问题。我没有检查代码是否有错误。因此,不,以书面形式返回结果并没有错。不涉及任何费用。任何现代编译器都将使用它返回结果


使用新操作符是非常糟糕的形式。这样做会使调用函数承担删除对象的负担。搜索“C++RAII”。

您正在返回向量的副本-完全可以。我不推荐
新向量的版本。按值返回是最好的方法。我建议使用语法
if(root!=NULL){…}
。或者,更好的是,
如果(root!=0){…}
@palsm4这比
!=nullptr
?@palsm4-Bah,
如果(根)
,很明显。或者OP的版本,但绝对不是你所建议的。你正在返回向量的副本-完全可以。我不推荐
新向量
版本。按值返回是最好的方法。我建议使用语法
if(root!=NULL){…}
。或者,更好的是,
如果(root!=0){…}
@palsm4这比
!=nullptr
?@palsm4-Bah,
如果(根)
,很明显。或者OP的版本,但绝对不是你所建议的。为什么要投反对票?如果这是错误的,请告诉我们原因。“这样做会让调用函数承担删除对象的负担。”-这就是为什么我们有智能指针的原因。@Neil-True。但是没有理由在这里使用指针,聪明的,愚蠢的,或者智商一般的。为什么要投反对票?如果这是错误的,请告诉我们原因。“这样做会让调用函数承担删除对象的负担。”-这就是为什么我们有智能指针的原因。@Neil-True。但这里没有理由使用指针,聪明、愚蠢或智商一般的指针。
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;
}