Вот функция пузырьковой сортировки я просто написал:Эквивалент кода C для Шаблонного C++
template <class iter>
void bubble_sort(iter begin, iter end, int (*cmp)(void *, void *)) {
bool didSwap;
do {
didSwap = false;
for (iter temp = begin; (temp + 1) != end; ++temp)
if ((*cmp)((temp+1), (temp))) {
std::swap(*(temp+1), *temp);
didSwap = true;
}
--end;
} while (didSwap);
}
мне было интересно, если это возможно для такой вещи, чтобы быть сделаны в C. Функция сравнения отлично работает до тех пор, поскольку он не используется со стандартными контейнерами stl, такими как deque, vector, list и т. д. Но это iter begin
и iter end
, о которых я беспокоюсь. Поскольку вы не можете выполнить арифметику указателя с void, как я могу это сделать? Можно ли сделать это?
Читайте о 'qsort'. –
Это ['qsort()'] (http://en.cppreference.com/w/c/algorithm/qsort) доступно в стандартном C и было для * десятилетий *, заставило бы меня поверить в ответ на ваш вопрос просто «да, его возможно, потому что это уже реальность». И ответить, как вы указатель арифметики с 'void *'. вы этого не делаете. Вы пишете свою функцию, чтобы потребовать «размер элемента» и использовать ее с помощью математики с 'unsigned char *', отличным от вашего 'void *'. – WhozCraig
Вау, как я забыл про qsort, когда писал функцию сортировки? – smac89