将向量传递给函数
pass vector to function
我正在尝试让这段代码正常工作。由于某种原因,算法没有被调用或没有以正确的方式实现。如果我运行编译良好的代码,我会得到相同的未排序输入。我尝试了一些通过矢量的方法,但我不确定摩擦在哪里。
#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
在函数内进行了修改,但更改不会传播到原始向量,只会传播到函数作用域内的向量。
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用向量的template_back函数
- 如何通过派生类函数更改基类中的向量
- 变量没有改变?通过向量的函数调用
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- std::sort()函数无法对向量的一部分进行排序
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- C++中函数的向量返回类型引发错误
- 添加存储在向量中的大整数的函数出现问题
- 如何在 c++ 中定义接受不同参数类型的函数向量?
- 具有 lambda 函数的函数向量
- 你能用参数制作函数向量吗?
- 在C++中使用成员函数向量时,有没有办法实现协变返回类型
- 在编写 lambda 函数向量时出现隔离错误
- 如何在 boost.process 间共享内存中使用复杂结构"push_back"函数向量
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法
- 运行提升for_each中的成员函数向量
- 创建和回推函数向量
- C++,指向函数向量的指针的STL映射