## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

No credit card required

# 6.5. Storing Objects in a list

## Problem

You need to store items in a sequence, but your requirements don't match up well with a `vector`. Specifically, you need to be able to efficiently add and remove items in the middle of the sequence, not just at the end.

## Solution

Use a `list`, declared in `<list>`, to hold your data. `list`s offer better performance and more flexibility when modifying the sequence at someplace other than the beginning or the end. Example 6-5 shows you how to use a `list`, and shows off some of its unique operations.

Example 6-5. Using a list

`#include <iostream> #include <list> #include <string> #include <algorithm> using namespace std; // A simple functor for printing template<typename T> struct printer { void operator()(const T& s) { cout << s << '\n'; } }; bool inline even(int n) { return(n % 2 == 0); } printer<string> strPrinter; printer<int> intPrinter; int main() { list<string> lstOne; list<string> lstTwo; lstOne.push_back("Red"); lstOne.push_back("Green"); lstOne.push_back("Blue"); lstTwo.push_front("Orange"); lstTwo.push_front("Yellow"); lstTwo.push_front("Fuschia"); for_each(lstOne.begin(), // Print each element in the list lstOne.end(), // with a custom functor, print strPrinter); lstOne.sort(); // list has a member for sorting lstTwo.sort(); lstOne.merge(lstTwo); // Merge the two lists and print for_each(lstOne.begin(), // the results (the lists must be lstOne.end(), // sorted before merging) strPrinter); list<int> intLst; intLst.push_back(0); intLst.push_back(1); ...`

## With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

No credit card required