簡體   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