моя проблема в том, что я не понимаю, как использовать STL, когда я
есть * vList .. это указатель на первый элемент вектора?
Я предполагаю, что вы должны как часть домашней работы использовать указатель на вектор вместо самого вектора. Как правило, я никогда не использую указатели на контейнеры. На самом деле, лучшее, что я обнаружил при переходе с C на C ++, это то, что я мог писать целые программы без указателей, благодаря программированию на STL. Если вам не требуется указатель на вектор, я рекомендую использовать вектор напрямую.
Конечно, использовать вектор проще, чем указатель, но не волнуйтесь. Использование указателя не так уж плохо.
Во-первых, чтобы использовать указатель на что-то , нужно выделить что-то . Итак, в вашем конструкторе, вызовите new
.
vList = new std::vector<NODETYPE>;
Каждый раз, когда мы вызываем new
, у нас должно быть совпадение delete
. Так как наш new
находится в нашем конструкторе, нам нужно вызвать delete
в деструкторе:
delete vList;
Вы сказали:
но поскольку vList является указателем ... он не очень хорошо работает.
Здесь жизнь становится легче. Как правило, если p
является указателем на некоторый тип, тогда (*p)
является объектом, на который указывает p
. Вот несколько примеров:
int i = 1;
int *pInt = &i;
i = 4;
(*pInt) = 4;
std::cout << i << " " << (*pInt) << "\n";
std::vector<NODETYPE> v;
std::vector<NODETYPE> *pVector;
v.push_back();
(*pVector).push_back();
it = v.begin();
it = (*pVector).end();
Итак, вызвать членов vList очень просто: (*vList).empty()
.
Итак, ваш код может быть:
void insertAtFront(const NODETYPE& node) { (*vList).push_front(node); }
Существует оператор быстрого доступа ->
, который облегчает чтение приведенного выше текста:
void insertAtFront(const NODETYPE& node) { vList->push_front(node); }
Выражение x->y
более или менее эквивалентно (*x).y
.
Подводя итог:
Выделите vList
в конструкторе с помощью new
. Уничтожьте свой vList
в своем деструкторе с помощью delete
. Вызвать членов vList, используя (*vList).function()
или vList->function()
.
Удачи, и возвращайтесь, если у вас есть другие вопросы!
P.s. Поскольку у вас нетривиальный деструктор, вам нужно учитывать правило трех .
P.P.s. Вы сказали что-то про итерацию вектора в вашем деструкторе и удаление каждого из объектов, которые вы там найдете. Вам нужно было бы сделать это только в том случае, если ваш тип данных был vector-of-pointers-to-NODETYPE (в отличие от того, что вы объявили: pointer-to-vector-of-NODETYPE). До тех пор, пока вы не освоитесь с указателями, я не рекомендую хранить указатели в контейнерах STL.