online compiler and debugger for c/c++

code. compile. run. debug. share.
Source Code   
Language
#include "CustomList.h" #define AT_ 1 /* std::string int main(int argc, char *argv[]) { CustomList list; list.push_front("added first"); list.push_front("added second"); list.pop_front(); list.push_back("added third"); list.push_back("added fourth"); list.pop_back(); list.push_back("added fifth"); printf("At [%lu]: \"%s\"\n", AT_, list.at(AT_).c_str()); printf("Size: \n- %lu\n", list.size()); list.print(); printf("Done!\n"); return 0; } */ int main(int argc, char *argv[]) { CustomList<int> list; list.push_front(111); list.push_front(222); list.pop_front(); list.push_back(333); list.push_back(444); list.pop_back(); list.push_back(555); list.remove_at(0); list.insert_at(1, 222); printf("At [%lu]: \"%i\"\n", AT_, list.at(AT_)); printf("Size: \n- %lu\n", list.size()); list.print(); printf("Done!\n"); return 0; }
#ifndef CUSTOMLIST_H #define CUSTOMLIST_H #include <cstdio> #include <iostream> #include <string> /** One node in a linked list of strings. */ template <typename T> struct CustomListNode { T item; CustomListNode *next; }; /** A linked list of strings. */ template <typename T> class CustomList { public: CustomList() { } ~CustomList() { CustomListNode<T> *p = begin_; CustomListNode<T> *pNext = nullptr; while (p != nullptr) { pNext = p->next; delete p; p = pNext; } } /** Print out the items in the list. */ void print() { puts("Contents:"); CustomListNode<T> *p = begin_; if(p == nullptr) { puts("!Empty!"); return; } while (p != nullptr) { std::cout << "- " << p->item << "\n"; p = p->next; } } size_t size() { return len_; } void insert_at(size_t n, const T& item) { CustomListNode<T> *node = new CustomListNode<T>; node->item = item; CustomListNode<T> **p = &begin_; for(size_t i = 0; i < n; i++, p = &((*p)->next)); node->next = *p; *p = node; len_++; } void remove_at(size_t n) { CustomListNode<T> **p = &begin_; for(size_t i = 0; i < n; i++, p = &((*p)->next)); *p = (*p)->next; len_--; } void push_front(const T& item) { CustomListNode<T> *node = new CustomListNode<T>; node->item = item; node->next = begin_; begin_ = node; len_++; } void pop_front() { if(begin_ != nullptr) { CustomListNode<T> *pNext = begin_->next; delete begin_; begin_ = pNext; len_--; } else { puts("ERROR: List already empty"); exit(1); } } void push_back(const T& item) { CustomListNode<T> *node = new CustomListNode<T>; node->item = item; node->next = nullptr; if(begin_ == nullptr) { begin_ = node; } else { CustomListNode<T> *p = begin_; while(p->next) p = p->next; p->next = node; } len_++; } void pop_back() { if(begin_ != nullptr) { CustomListNode<T> *p = begin_; while(p->next->next) p = p->next; delete p->next; p->next = nullptr; len_--; } else { puts("ERROR: List already empty"); exit(1); } } T& at(size_t n) { CustomListNode<T> *p = begin_; if(begin_ == nullptr) { puts("ERROR: List empty"); exit(1); } else if(n >= len_) { printf("ERROR: List doesn't have an element at %lu\n", n); exit(1); } for(size_t i = 0; i < n; i++, p = p->next); return p->item; } private: CustomListNode<T> *begin_ = nullptr; size_t len_ = 0; }; #endif

Compiling Program...

Command line arguments:
Standard Input: Interactive Console Text
×

                

                

Program is not being debugged. Click "Debug" button to start program in debug mode.

#FunctionFile:Line
VariableValue
RegisterValue
ExpressionValue