繁体   English   中英

如何转换 'std::vector<double> ' 在初始化时'加倍'</double>

[英]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。 您不必对参考文献执行此操作。

  • 你有一个 C++ 编译器,所以使用它,发送对你的 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::vectoroperator[] ,首先需要从指向它的指针获取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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM