3
#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++,如果我在指针方面犯了任何明显的错误,请原谅我)。

4

2 回答 2

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()

于 2012-11-26T22:56:33.307 回答
2

将变量重命名为vector其他名称:

vector<int>& PerformSort::sortArray (vector<int>& wayBetterName)

&

return wayBetterName;

是什么促使您将变量命名为与类型相同的名称?

代码还有很多其他问题。

你不需要指针,你不需要引用,而且你最好只使用std::sort.

于 2012-11-26T22:55:48.477 回答