私は C++ の初心者で、イライラする問題に遭遇しました -
私はこのテンプレート化された LinkedList 実装を持っています:
template <typename U>
class LinkedList : std::iterator<std::input_iterator_tag, U> {
public:
struct Node {
friend LinkedList;
U content;
Node* getNext() { return next; };
private:
Node* next;
Node* prev;
};
LinkedList() : head(NULL), tail(NULL) { };
~LinkedList() {
Node * current = tail;
while(current != NULL) {
Node* temp = current;
current = current->prev;
delete temp;
}
};
Node* getHead() { return head; }
Node* getTail() { return tail; }
bool append(U content) {
Node* node = new Node();
if(node == NULL) return false;
node->content = content;
if(tail == NULL) {
tail = head = node;
} else {
tail->next = node;
node->prev = tail;
tail = node;
}
return true;
};
bool remove(U* cont) {
if(tail == NULL) return false;
if(cont != NULL) *cont = tail->content;
Node *temp = tail;
if(tail == head) {
tail = NULL;
head = NULL;
} else tail = temp->prev;
delete temp;
return true;
};
private:
Node *head, *tail;
};
それに対して次のコードを実行します。
char c1, c2;
cout << "start allocation" << endl;
LinkedList<int>* list = new LinkedList<int>();
for(ULONGLONG i = 0; i < 1e5; i++) {
list->append(0);
}
cout << "allocation complete" << endl;
cin >> c1;
cout << "start deleting" << endl;
delete list;
cout << "done deleting" << endl;
cin >> c2;
cout << c2 << endl; // don't optimize read key away
したがって、100,000 個の int ノードを割り当ててから、それらをすべて削除します。すべてのノードへのスペースの割り当てはほぼ瞬時に行われますが、ノードの削除には約 10 秒かかります。私は明らかに間違ったことをしていますか?