将向量传递给函数

pass vector to function

本文关键字:函数 向量      更新时间:2023-10-16

我正在尝试让这段代码正常工作。由于某种原因,算法没有被调用或没有以正确的方式实现。如果我运行编译良好的代码,我会得到相同的未排序输入。我尝试了一些通过矢量的方法,但我不确定摩擦在哪里。

#include <iterator>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <vector>


void shift_down(std::vector<int> v, int i, int s){     
        while ( i*2 + 1 < s ) { 
            int child = 2*i + 1; 
            if ((child + 1 < s) && v[child] < v[child+1]) child++;
        if (v[i] < v[child]) {   
            std::swap(v[i],v[child]); 
            i = child;  
        }        
        else            
            return;    
    }
} 
void heap_sort(std::vector<int> v, int s){          
    for (int i = s/2; i >= 0; i--) { 
        shift_down(v, i, s);    
    }
    while (s-1 > 0) {  
        std::swap(v[s-1], v[0]);
        shift_down(v, 0, s-1);  
        s--;
    }
}  

int main(){
    std::string line;
    std::vector<int> vec;
    std::cout << "Please enter numbers seperated by spaces:" << std::endl;
    std::getline(std::cin, line);
    std::istringstream stream(line);
    std::copy(std::istream_iterator<int>(stream),
    std::istream_iterator<int>(),
    std::back_inserter(vec));
    int size = vec.size();
    heap_sort(vec,size);  
    std::copy(vec.begin(),vec.end(),
          std::ostream_iterator<int>(std::cout, "t"));
    std::cout<<"t"<<std::endl;
    return 0;
}

只需通过引用获取向量:

void heap_sort(std::vector<int>& v, int s){  
//                             ^
void shift_down(std::vector<int>& v, int i, int s){  
//                              ^

现场演示

您当前正在将传入的向量复制到 v 参数中。 v在函数内进行了修改,但更改不会传播到原始向量,只会传播到函数作用域内的向量。