#include <iostream>
#include <vector>
using namespace std;
class PerformSort
{
public:
const vector<int> * p;
vector<int>& getElements(int);
vector<int>& sortArray(vector<int>&);
void printer(vector<int>&);
}firstSort;
vector<int>& PerformSort::getElements (int num)
{
vector<int> elements(num);
for (int i = 0; i < num; i++)
{
cout << "Enter elements into the array: ";
cin >> elements[i];
}
p = &elements;
return p;
}
vector<int>& PerformSort::sortArray (vector<int>& vector)
{
int holder, min;
for (int i = 0; i < (sizeof(vector) - 1); i++)
{
min = i;
for (int j = (i + 1); j < sizeof(vector); j++)
{
if (vector[j] < vector[min])
{
min = j;
}
}
if (min != i)
{
holder = vector[i];
vector[i] = vector[min];
vector[min] = holder;
}
}
return vector;
}
void PerformSort::printer(vector<int>& vector2)
{
for (int i = 0; i < sizeof(vector2); i++)
{
cout << vector2[i] << " ";
}
}
int main ()
{
int numberOfTimes;
cin >> numberOfTimes;
firstSort.printer(firstSort.sortArray(firstSort.getElements(numberOfTimes)));
return 0;
}
这将返回错误:“类型的表达式中类型引用的初始化无效”。我创建SelectionSort算法的第一种方法是尝试按值传递矢量(愚蠢)。经过一番研究后,我开始使用指针代替。但是,这导致了上述错误。将所有内容声明为常量似乎并不能解决潜在的错误,尽管如果我理解正确的话,错误在于临时引用被传递到需要常量引用的地方。关于如何实现传递和返回向量的任何想法? (我来自Java背景,我刚刚开始使用C ++,所以请原谅我,如果我对指针有任何明显的错误)。
答案 0 :(得分:4)
按值返回:
vector<int> PerformSort::getElements (int num)
{
vector<int> elements(num);
for (int i = 0; i < num; i++)
{
cout << "Enter elements into the array: ";
cin >> elements[i];
}
return elements;
}
这也可以让你摆脱p
,这本身就是一大堆蠕虫。
最后,我注意到你在很多地方使用sizeof(vector)
。这不会给你矢量中的元素数量;请改用vector.size()
。
答案 1 :(得分:2)
将变量vector
重命名为其他内容:
vector<int>& PerformSort::sortArray (vector<int>& wayBetterName)
&安培;
return wayBetterName;
是什么促使您将变量命名为类型?
代码中存在许多更多其他问题。
你不需要指针,你不需要引用,而且你最好只使用std::sort
。