[英]how to convert 'std::vector<double>' to 'double' in initialization
我正在尝试制作快速排序程序。 我只是不明白为什么以及如何出现这个错误。 我已经尝试了所有在线方法,但无法解决问题。 如果我用数组代替向量来执行此操作,我得到正确的 output 但向量错误即将到来。
我的错误是:
.\quicksort.cpp:7:28: error: cannot convert 'std::vector<double>' to 'double' in initialization
double pivot = values[end];
.\quicksort.cpp:10:19: error: no match for 'operator<=' (operand types are 'std::vector<double>' and 'double')
if (values[i] <= pivot) {
那么如何将vector<double>
转换为 double 呢?
这是我的代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int partition(vector<double> *values, int start, int end) {
double pivot = values[end];
int pIndex = start;
for (int i=start; i<end; i++) {
if (values[i] <= pivot) {
swap(values[i], values[pIndex]);
pIndex++;
}
}
swap(values[pIndex], values[end]);
return pIndex;
}
void quicksort(vector<double> *values, int start, int end) {
if (start<end) {
int pIndex;
pIndex = partition(values, start, end);
quicksort(values, start, pIndex-1);
quicksort(values, pIndex+1, end);
}
}
int main() {
int n;
cin >> n;
vector<double> values(n);
for (int i = 0; i < n; i++) {
cin >> values[i];
}
quicksort(values, 0, n-1);
for (int j=0; j<n; j++) {
cout<<values[j]<<" ";
}
return 0;
}
如何纠正这些错误?
引用不是指针
int partition(vector<double>& values, int start, int end) {
void quicksort(vector<double>& values, int start, int end) {
如果你使用指针(但你不应该),正确的代码是
double pivot = (*values)[end];
指针与它们指向的东西不同,您必须使用*
或->
来获取指针指向的 object。 您不必对参考文献执行此操作。
void quicksort(vector<double> &values, const int start, const int end);
int partition(vector<double> &values, const int start, const int end)
你的编译时错误消失了,指针指向 object 你需要像这样调用你的 function :
quicksort(&values, 0, n - 1);
因为您需要它的地址(实际上您的指针需要它)。
你需要使用std::vector
的operator[]
,首先需要从指向它的指针获取std::vector
object :
double pivot = (*values)[end];
如您所见,它很丑陋并且可能很复杂,因此在这些情况下最好使用引用而不是指针。
您的分区和快速排序函数将指针作为参数而不是参考值。
你的函数应该这样声明:
int partition(vector<double> &values, int start, int end)
void quicksort(vector<double> &values, int start, int end)
您收到错误的原因是因为当您使用数组访问器( [i]
)时 values 参数是一个指针,它假定 values 是一个向量数组并返回一个向量而不是双精度数。
您应该将vector<double>&
传递给您的 function 而不是vector<double>*
,即通过引用传递而不是通过指针传递。 如果通过指针传递,则需要使用->[index]
访问向量的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.