有一个包含指向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函数中完美执行,但是当它返回时,向量保持不变。
如何在呼叫功能之间保持更改?
谢谢!
答案 0 :(得分:0)
您的方法getStudents()
返回一个向量,返回的向量不是原始向量,它是它的副本。
要解决您的问题,请使方法getStudents()
返回对原始向量的引用
所以你的方法应该是这样的:
vector<Student*>* getStudents() {
return &studentsVector;
}
你的电话应该是这样的:
SelectionSort::sortPositionExchange(sfr->getStudents());
另一个解决方案是在StudentsFileReader
内部使用SelectionSort::sortPositionExchange
对向量进行排序。这看起来像是:
void StudentsFileReader::sortPositionExchange() {
SelectionSort::sortPositionExchange(students);
}