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 に答える