Последовательности типа list
Приведем для ясности результат работы рассматриваемой программы:
Man List # Sequence: 1. Zoran Todorovitch, Age: 27 2. Melissa Robinson, Age: 9 3. Joy Amore, Age: 18 After inserting 3 joes # Sequence: 1. Zoran Todorovitch, Age: 27 2. Joe Doe, Age: 30 3. Joe Doe, Age: 30 4. Joe Doe, Age: 30 5. Melissa Robinson, Age: 9 6. Joy Amore, Age: 18 After removing all joes and sort # Sequence: 1. Melissa Robinson, Age: 9 2. Joy Amore, Age: 18 3. Zoran Todorovitch, Age: 27 After merging with simons list # Sequence: 1. Melissa Robinson, Age: 9 2. Simon Paul, Age: 15 3. Simon Paul, Age: 15 4. Simon Paul, Age: 15 5. Joy Amore, Age: 18 6. Zoran Todorovitch, Age: 27 After merging Simons li.size: 0 Removing simons Deque copied from list # Sequence: 1. Melissa Robinson, Age: 9 2. Joy Amore, Age: 18 3. Zoran Todorovitch, Age: 27 Vector after merging list and deque f Sequence: 1. Melissa Robinson, Age: 9 2. Joy Amore, Age: 18 3. Melissa Robinson, Age: 9 4. Joy Amore, Age: 18 5. Zoran Todorovitch, Age: 27 6. Zoran Todorovitch, Age: 27 Deque after merging with list # Sequence: 1. Melissa Robinson, Age: 9 2. Joy Amore, Age: 18 3. Zoran Todorovitch, Age: 27
Генерирование последовательности
С помощью алгоритма generate удобно создавать последовательности, имеющие строго определенную структуру. Например, если объявлен список целых из шести элементов, то его можно заполнить значениями, сгенерированными с помощью функции generate:
//========= Создаем список целых list<uint> 1st (6); //========= Генерируем степенную последовательность generate (1st.begin (), Ist.end(), pows); pr(1st,"List of generated powers");
Здесь pows – это внешняя функция, которая при каждом обращении возвращает возрастающую степень двойки. Эффект достигается за счет того, что static-переменная г инициализируется единицей во время компиляции, а затем помнит свое предыдущее значение:
uint pows() { static uint r = 1; return r <= 1; }
Если надо добиться обратного эффекта, то есть убрать закономерность в последовательности чисел, то можно воспользоваться шаблоном функции random_shuffle, которая переставляет элементы последовательности в одно из п! состояний. Например:
vector <int> v; for (int i = 0; i <= 6; i++) v.push_back(i+1); random_shuffle(v.begin(), v.end()); pr(v,"Vector of shuffled numbers");