为什么矢量不改变它的元素?

时间:2016-10-04 20:28:47

标签: c++ vector

有一个包含指向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函数中完美执行,但是当它返回时,向量保持不变。

如何在呼叫功能之间保持更改?

谢谢!

1 个答案:

答案 0 :(得分:0)

您的方法getStudents()返回一个向量,返回的向量不是原始向量,它是它的副本。
要解决您的问题,请使方法getStudents()返回对原始向量的引用 所以你的方法应该是这样的:

vector<Student*>* getStudents() {

    return &studentsVector;
}

你的电话应该是这样的:

SelectionSort::sortPositionExchange(sfr->getStudents());

另一个解决方案是在StudentsFileReader内部使用SelectionSort::sortPositionExchange对向量进行排序。这看起来像是:

void StudentsFileReader::sortPositionExchange() {

    SelectionSort::sortPositionExchange(students);
}