Я работаю над программой, в которой я практикую использование шаблонных классов для написания связанного списка с контейнером списка за кулисами, выполняющим большинство операций:
template <typename T>
class LinkedList
{
public:
void add(const T& t) {
q.push_front(t);
}
T pop() {
T t = q.front();
q.pop_front();
return t;
}
T& operator[](int i);
private:
list<T> q;
};
Теперь я хочу реализовать оператор []
, чтобы я мог создать объект LinkedList
и затем выполнять такие операции, как:
list1[0] = 1;
В настоящее время у меня есть:
template <typename T>
T& LinkedList<T>::operator[](int i)
{
LinkedList<T> tempList;
int j;
T* getNode;
for(j = 0; j < (i + 1); j++) {
T* currentNode = pop();
tempList.add(currentNode);
if(j == i) {
getNode = currentNode;
}
}
while(tempList.isEmpty == false) {
add(tempList.pop());
}
return *getNode;
}
Это явно не работает, и это потому, что я каким-то образом путаюсь с получением ссылки на конкретный элемент, который я хочу, и возвращаю его, но я новичок в C ++ и точно не знаю, как лучше всего подойти к этой проблеме есть.