将向量传递给函数

时间:2014-12-07 02:17:18

标签: c++

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

#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;
}

1 个答案:

答案 0 :(得分:1)

只需参考矢量:

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

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

Live demo

您当前正在将传入的向量复制到v参数中。 v在函数内被修改,但更改不会传播到原始向量,只传播到函数范围内的那个。