Use std::list whenever possible, or at least LinkedList, as it's more tested and still maintained!!!
Nothing big, just my own implementation of a linked list in c++ for all kind of Arduino projects.
This Arduino Library was inspired by the LinkedList
and is mostly compatible too it.
I made it to get a deeper understanding of lists.
1) Download the source code from GitHub.
2) Unzip and rename the Folder name to "SimpleList".
3) Paste it in your Library folder (Usually located somewhere at documents/Arduino/libraries).
4) Restart the Arduino IDE.
You can also just download the SimpleList.h file and paste it in your Arduino sketch folder.
#include <SimpleList.h>
// A list of integer
SimpleList<int> *myLinkedList = new SimpleList<int>();
// A list of 'MyClass'
SimpleList<MyClass> *mySimpleList = new SimpleList<MyClass>();
int theSize = myList->size();
// Add a compare function to sort or search the list
list->setCompare([](int &a, int &b) -> int {
if(a < b) return -1;
if(a == b) return 0;
if(a > b) return 1;
});
// add(obj) will add the object at the end of the list
myList->add(myObject);
// add(index, obj) method will insert the object at the specified index
myList->add(0, myObject); // Add at the beginning
myList->add(3, myObject); // Add at index 3
// insert will try to put the object at the correct spot to keep the list isSorted (compare function is required!)
myList->insert(myObject);
// Get the first element
myObject = myList->get(0);
// Get the third element
myObject = myList->get(2);
// Get the last element
myObject = myList->get(myList->size() - 1);
// PLEASE NOTE: compare function must be set!
// Sort the list
list->sort();
// Check if list is currently sorted
bool isSorted = list->isSorted();
// Replace the first element
myList->replace(0, myObject);
// Replace the third element
myList->replace(2, myObject);
// Replace the last element
myList->replace(myList->size() - 1, myObject);
// Remove the first object
myList->remove(0);
// pop() will remove and return the last element
myDeletedObject = myList->pop();
// shift() will remove and return the first element
myDeletedObject = myList->shift();
// clear() will erase the entire list, leaving it with 0 elements
myList->clear();
// Please note that clear() wont free memory from pointers, you have to manually delete/free those!
// Example:
while(list->size() > 0){
delete myList->get(0).somePointer;
list->remove(0);
}
// PLEASE NOTE: compare function must be set!
// seach() returns the index of the element, not the element itself!
int indexOfSeven = list->search(7);
// When the list is sorted, you can also do a more efficient binary search
// here find the element
int indexOfIntOne = list->binSearch(1);
// PLEASE NOTE: compare function must be set!
int numberOfZeros = myList->count(0);
// swap(index-X, index-Y)
list->swap(0, list->size()-1);