如何在初始化中将 'std::vector<double>' 转换为 'double'

how to convert 'std::vector<double>' to 'double' in initialization

我正在尝试制作快速排序程序。我只是不明白为什么以及如何出现这个错误。我已经尝试了所有在线方法,但无法解决问题。如果我用数组代替向量来执行此操作,我会得到正确的输出,但会出现向量错误。

我的错误是:

.\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> 转换为两倍?

这是我的代码:

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

指针和它们指向的东西不一样,你必须使用*->才能得到指针指向的对象。您不必对参考文献执行此操作。

  • 你有一个 C++ 编译器,所以使用它,发送对你的对象的引用而不是指针:
void  quicksort(vector<double> &values, const int start, const int end);
int  partition(vector<double> &values, const int start, const int end)

你的编译时错误消失了,指针指向你需要像这样调用你的函数的对象:

quicksort(&values, 0, n - 1);

因为您需要它的地址(实际上您的指针需要它)。

并且您需要使用 std::vectoroperator[],首先需要从指向它的指针获取 std::vector 对象:

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 是一个向量数组并且 returns矢量不是双精度。

您应该将 vector<double>& 传递给您的函数而不是 vector<double>*,即通过引用传递而不是通过指针传递。如果通过指针传递,则需要使用 ->[index].

访问向量的元素