#c #function #stdvector
#c #функция #stdvector
Вопрос:
Пытаюсь вернуть завершенную пузырьковую сортировку после ее завершения из функции, и я получаю это:
E0415 не существует подходящего конструктора для преобразования из «std::vector<double, std::allocator<double>> *» в «std ::vector<double, std::allocator<double>>»
Вот код
class BubbleSort : SortingAlogrithm
{
void swap(double *xp, double *yp)
{
double temp = *xp;
*xp = *yp;
*yp = temp;
}
public:
vector<double> Sort(vector<double> amp;newVect, int arraySize)
{
cout << "Bubble sort algorithm commencing" << endl;
int i, j;
for (i = 0; i < arraySize - 1; i )
// Last i elements are already in place
for (j = 0; j < arraySize - i - 1; j )
if (newVect[j] > newVect[j 1])
swap(amp;newVect[j], amp;newVect[j 1]);
cout << "Ordered List: ";
for (int i = 0; i < arraySize; i )
{
cout << newVect[i] << " ";
}
return amp;newVect;
}
};
Комментарии:
1. Измените оператор return на
return newVect
, и проблема исчезнет.2.
return amp;newVect;
Ваша функция возвращает по значению, в то время как вы пытаетесь вернуть по указателю.3. Вы действительно хотите частное наследование?
4. @NeilButterworth что вы имеете в виду?
5.
class BubbleSort : SortingAlogrithm
это частное наследование. обычно предпочтительнее публичное наследование.
Ответ №1:
return amp;newVect;
является синтаксически некорректным, поскольку возвращаемый тип является std::vector<double>
и amp;newVect
имеет тип std::vector<double>*
.
Это то, на что жалуется компилятор.
Вам нужно использовать
return newVect;
Предложение по улучшению
Будет лучше изменить возвращаемый тип на ссылочный, чтобы вы не заставляли вызывающую функцию создавать копию при вызове функции.
vector<double>amp; Sort(vector<double> amp;newVect, int arraySize)
{
...
return newVect;
}
Все же лучше изменить возвращаемый тип на void
, поскольку вызывающая функция сортирует объект.
void Sort(vector<double> amp;newVect, int arraySize)
{
...
// Not return statement
}
Комментарии:
1. В вашем примере нет необходимости возвращать по ссылке, потому что параметр уже передан по ссылке, поэтому любое изменение параметра повлияет на аргумент.
2. @Raindrop7, верно.
3. @RSahu Если бы я изменил возвращаемый тип на void, смог бы я использовать его в своей основной функции? Моя главная цель в целом в этом проекте — программа, которая сравнивает эффективность различных алгоритмов сортировки с разными наборами данных
4. @TavianT, Да, ты определенно можешь.
5. @TavianT, если вы хотите сохранить оригинал
std::vector
, чтобы иметь возможность сравнивать различные методы сортировки, вам нужно будет сделать копии исходного вектора и передать копии функциям сортировки.