Student 클래스에 대한 포인터를 포함하는 벡터를가집니다. 나는 벡터 요소를 정렬하기 위해서만 내용을 바꾸지 말고 포인터를 바꿔야한다.벡터가 요소를 변경하지 않는 이유는 무엇입니까?
이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의 함수 내에서 실행하지만 반환 할 때, 벡터가 변하지 유지 :
StudentsFileReader* sfr = new StudentsFileReader(filepath);
cout << "Calling sortPositionExchange..." << endl;
SelectionSort::sortPositionExchange(&(sfr->getStudents()));
cout << "Done!" << endl;
가 여기 내 호출 코드입니다 : 여기 내 발신자 코드입니다.
호출 기능 간 변경 사항을 유지하려면 어떻게해야합니까?
감사합니다.
문제는'getStudents()'에 있고 여기의 코드에는 없습니다. – drescherjm
또한 C++에서 벡터에 대한 포인터를 사용하여 참조로 벡터를 전달하는 것을 선호합니다. – drescherjm
감사합니다. @drescherjm! getStudents()를 보겠습니다. –