如何在初始化中将 '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::vector
的 operator[]
,首先需要从指向它的指针获取 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]
.
访问向量的元素
我正在尝试制作快速排序程序。我只是不明白为什么以及如何出现这个错误。我已经尝试了所有在线方法,但无法解决问题。如果我用数组代替向量来执行此操作,我会得到正确的输出,但会出现向量错误。
我的错误是:
.\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::vector
的 operator[]
,首先需要从指向它的指针获取 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]
.