"items list" or "item list"

I find ItemList much more descriptive. It is a list of objects of type Item.

On the other hand, if you had a collection of Item objects, you could call it Items, and ItemsList would designate a list of collections.


class Items: List<Item>

And more readable, in general I do a typedef

// C++98
typedef List<Item> Items;

// since C++11 you can write it also this way, and I prefer this:
using Items = List<Item>;

It is often good practice (clean code) to think about a more specialized class that hides the List. "Prefer composition by aggregation over inheritance" is common idiom in OOP (quoting Sutter/Alexandrescu: C++ Coding Standards: 101 Rules, Guidelines, and Best Practices)

Encapsulation of a collection is most of the time a good practice which lowers the complexity of calling code:

class Encapsulation
{
    Items m_items;
    public: 
    void AddItem(const Item&);
    void RemoveAllItems();
    // ... all the functions about managing the List that would be otherwise boilerplate code spread all over your codebase
}

In English, a "collection of stamps" is a "stamp collection". (At best, "stamps collection" would be understood).

In programming, I'm not entirely sure why, but we1do sometimes use the form "StampsCollection".

It may be because we try to use more precise and logical lingo than traditional English provides; we start with the name "Item", pluralise it to "Items", then be precise by stating that our collection of "Items" is a "List" rather than an "Array" or some other implementation.

You're likely to see both variants, though, and it doesn't really matter.

Certainly, neither in English nor in programming would ItemsList imply a list of collections of Items, at least not to most people.


1 ... for some value of "we". Naming choices are, of course, down to personal preference. However, I've personally seen this as a tendency.