[英]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.