c++ 递归分配到返回类型为vector本身的vector

osh3o9ms  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(147)

我希望收到一个向量,其中包含的数据节点的范围内(最小,最大)
但给出一个错误:

no instance of overloaded function "std::vector<_Tp, _Alloc>::push_back [with _Tp=int, _Alloc=std::allocator<int>]" matches the argument listC/C++(304)
ex1.cpp(116, 12): argument types are: (std::vector<int, std::allocator<int>>)
ex1.cpp(116, 12): object type is: std::vector<int, std::allocator<int>>
vector<int> rangeBWVec(binaryTreeNode<int>* root,int min, int max){
    
    vector<int> re;
    if(root==NULL){

        return re;
    }
    if(root->data>=min)
    {
        re.push_back(rangeBWVec(root->left,min,max));
    }

    if(root->data>=min && root->data<=max)
        re.push_back(root->data);

    if(root->data<=max)
    {
       re.push_back(rangeBWVec(root->right,min,max));
    }
    
}
v09wglhw

v09wglhw1#

push_back追加一个项目,如果你想从另一个容器中复制所有项目到这个容器中,那么你需要使用insert方法。然而,没有必要为合并容器而烦恼,只需通过引用传递累积向量。这不仅可以简化代码,还可以减少内存分配量。

void rangeBWVec
(
    binaryTreeNode<int> const * const p_node
,   int const min
,   int const max
,   vector<int> & accum
)
{
    if (p_node)
    {
        if (min <= p_node->data)
        {
            rangeBWVec(p_node->left, min, max, accum));
        }
        if ((min <= p_node->data) and (p_node->data <= max))
        {
            accum.emplace_back(p_node->data);
        }
        if (p_node->data <= max)
        {
            rangeBWVec(p_node->right, min, max, accum);
        }
    }
}

相关问题