gpt4 book ai didi

c++ - 为什么 vector 不改变它的元素?

转载 作者:太空宇宙 更新时间:2023-11-04 13:11:08 24 4
gpt4 key购买 nike

有一个 vector ,其中包含指向学生类的指针。我需要选择排序 vector 元素只改变指针,而不是内容。这是我的来电代码:

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 函数内部完美执行,但当它返回时, vector 保持不变。

我该怎么做才能保留调用函数之间的更改?

谢谢!

最佳答案

您的方法 getStudents() 返回一个 vector ,返回的 vector 不是原始 vector ,而是它的拷贝。
为了解决您的问题,请使方法 getStudents() 返回对原始 vector 的引用。
所以你的方法应该是这个样子:

vector<Student*>* getStudents() {

return &studentsVector;
}

你的电话应该是这样的:

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

另一种解决方案是在 StudentsFileReader 中创建一个方法,该方法使用 SelectionSort::sortPositionExchange 对 vector 进行排序。这看起来像:

void StudentsFileReader::sortPositionExchange() {

SelectionSort::sortPositionExchange(students);
}

关于c++ - 为什么 vector 不改变它的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39861204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com