Имейте вектор, который содержит указатели на класс Студента. Мне нужно, чтобы выбор сортировал векторные элементы, только изменяя указатели, а не содержимое. Вот мой код звонящего по телефону:Почему вектор не меняет свои элементы?
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(), давая вам знать. –