Studentクラスへのポインタを含むベクトルを持ちます。私はベクトル要素を並べ替えるだけで、内容を変更するのではなく、ポインタを変更する必要があります。ここに私の呼び出し元のコードは次のとおりです。ここでベクトルが要素を変更しないのはなぜですか?
StudentsFileReader* sfr = new StudentsFileReader(filepath);
cout << "Calling sortPositionExchange..." << endl;
SelectionSort::sortPositionExchange(&(sfr->getStudents()));
cout << "Done!" << endl;
は私の呼び出し元のコードは次のとおりです。
void SelectionSort::sortPositionExchange(vector<Student*>* students)
{
int i, j, min, aux, tam = students->size();
for (i = 0; i < tam - 1; i++)
{
min = i;
for (j = (i + 1); j < tam; j++)
{
if (students->at(j)->getCode() < students->at(min)->getCode())
{
min = j;
}
}
if (i != min)
{
Student* s = students->at(i);
*(&students->at(i)) = *(&students->at(min));
*(&students->at(min)) = s;
}
}
}
選択ソートはsortPositionExchange関数内完全に実行し、それが戻ったとき、ベクトルはそのまま保持します。
呼び出し関数間で変更を保持するにはどうすればよいですか?
ありがとうございます!
問題は 'getStudents()'にあり、ここのコードではないと思います。 – drescherjm
また、C++では、ベクトルへのポインタを使って、参照によってベクトルを渡す方が好きです。 – drescherjm
ありがとう@drescherjm!私はgetStudents()を見るつもりです –