Очень общее определение основного различия между функцией и методом :
Функции определены вне классов, а методы определены внутри и часть классов.
Похоже, это хороший кандидат для TAILQ_ *?
#include <sys/queue.h>
«мужская очередь» даст более подробную информацию - там есть простые списки, хвостовые очереди и кольцевые очереди. Это макросы, которые вам нужно прикрепить к вашим собственным структурам, а не к классам, конечно.
Код вашего сценария будет выглядеть примерно так (я должен был заставить add_to_queue возвращать какой-то код для проверки на наличие ошибок, и также избегайте глобальных переменных, но, надеюсь, меня простят в этом примере):
#include <stdio.h>
#include <stdlib.h>
#include <sys/queue.h>
TAILQ_HEAD(tailhead, entry) head;
struct entry {
char c;
TAILQ_ENTRY(entry) entries;
};
void add_to_queue(char ch) {
struct entry *elem;
elem = malloc(sizeof(struct entry));
if (elem) {
elem->c = ch;
}
TAILQ_INSERT_HEAD(&head, elem, entries);
}
int main(int argc, char *argv[]) {
char ch = 'A';
int i;
struct entry *elem;
TAILQ_INIT(&head);
for (i=0; i<4; i++) {
add_to_queue(ch);
ch++;
add_to_queue(ch);
elem = head.tqh_first;
TAILQ_REMOVE(&head, head.tqh_first, entries);
free(elem);
}
exit(0);
}
Отличный вариант - использовать Универсальную библиотеку C . Это библиотека C, смоделированная (свободно) на C ++ STL. Он предоставляет структуру очереди, списки и т. Д.
Его нет в стандартной библиотеке C; прослеживая связанные сообщения, похоже, что структура данных Queue должна была быть написана студентом.
В отличие от C ++, стандартная библиотека C не предоставляет стандартный набор контейнеров.
Во-первых, вам нужно C ++, а не C. C не является объектно-ориентированным языком, и в нем нет стандартных библиотек для таких вещей, как очереди.
Для C ++ ищите std :: queue.
#include <queue>
int main(int argc, const char *argv[])
{
std::queue q;
/// etc;
}
Вы можете , конечно, создадите структуру, подобную очереди, в C, но вам придется делать большую часть работы самостоятельно. См. Ответ ниже о макросах TAILQ_.