gpt4 book ai didi

c++ - 将 vector 传递给函数

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:01 25 4
gpt4 key购买 nike

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

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

最佳答案

简单地通过引用获取 vector :

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

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

Live demo

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

关于c++ - 将 vector 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27338868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com