Containers are any class that contains a multitude of similar data types (simple types like int, char, etc. but also advanced types like String and any class/struct you made).
The simplest container is an array: fixed size, linear storage unit of data.
A vector is a dynamically-sized array: it functions exactly like an array, but can increase and decrease its size [at a performance cost].
A linked list is an item class with a *next pointer. It can be "doubly linked" by including a *previous pointer as well. It is organized internally (i.e. the items take care of the order, in contrast to a vector that keeps items in place).
There are others (sets and maps, for instance, for associative data), but I've never really used them, so I can't really help you with those.
An iterator just keeps a pointer to the current item and provides an easy interface for traversing a container.
In this case, you could say:
1 2 3
ArtikelContainer *myIterator;
myIterator = first; // Provided you have an ArtikelContainer called 'first'
myIterator = myIterator->next; // myIterator is now a pointer to the second AC object.
Generally, an iterator class has the '++' operator overloaded to return the result of the third line.
Do mind that your class definition is wrong: *next has to be a pointer to the next ArtikelContainer, else you're not using a linked list. If you wish to store a linked list of Artikel objects, then the Artikel class needs a Artikel *next pointer, while the ArtikelContainer class needs a Artikel *first pointer.