Программирование >>  Разработка устойчивых систем 

1 ... 130 131 132 [ 133 ] 134 135 136 ... 196


Упражнения

1. Создайте контейнер set<char>, откройте файл (имя которого передается в командной строке), прочитайте его содержимое по одному символу и занесите каждый символ в множество. Выведите результат и проанализируйте порядок следования элементов. Имеются ли в алфавите буквы, не встречающиеся в этом конкретном файле?

2. Создайте три контейнера с объектами Noisy: вектор, дек и список. Отсортируйте их. Напишите шаблон функции, которая пол)ает вектор и дек, сортирует их и определяет время сортировки. Напишите специализированную шаблонную функцию, которая бы делала то же самое для списка (вместо обобщенного алгоритма в ней должна использоваться функция sort() класса списка). Сравните скорость сортировки для разных типов контейнеров.

3. Напишите программу для сравнения скорости сортировки списков с использованием алгоритмов list::sort() и std::sort() (то есть алгоритмической версии sort()).

return result;

int mainO { const int n = 3;

int adata[n*n] = (1.0.-1.2.2.-3.3.4.0); int bdata[n*n] = {3.4.-1.1.-3.0.-1.1.2}; valarray<int> aCadata, n*n): valarray<int> bCbdata. n*n); valarray<int> c(matmult(a, n. n, b. n. n)); printMatrixCc. n); } III:-

Каждый элемент итоговой матрицы с равен внутреннему произведению соответствующей строки а на столбец Ь. Используя срезы, мы можем извлечь эти строки и столбцы в объекты valarray и выполнить умножение с максимальной компактностью, применив глобальный оператор * и функцию sum(). Размеры итогового объекта valarray определяются на стадии выполнения; вам не придется беспокоиться о статическом ограничении размеров массива. Правда, линейные смещения для позиции придется вычислять самостоятельно (см. ранее i*bcols + j), но свобода выбора размеров и типов того стоит.

Итоги

в этой главе мы не стремились к сколько-нибудь углубленному описанию контейнеров STL. Ограниченный объем не позволяет привести все подробности, но теперь полученных читателем знаний хватит для самостоятельного поиска информации в других ресурсах. Надеемся, что эта глава дает представление о потенциальных возможностях STL и показывает, насколько быстрее и эффективнее решаются многие задачи при хорошем понимании и умелом применении STL.



4. Напишите генератор, который выдает случайные целые числа от О до 20 включительно, и заполните контейнер multiset<int>. Подсчитайте количество вхождений каждого значения по образцу программы MultiSetWordCount.cpp.

5. Измените программу StlShape.cpp так, чтобы вместо вектора в ней использовался дек.

6. Измените программу Reversible.cpp так, чтобы вместо вектора она работала с деками и списками.

7. Создайте контейнер stacl i nt> и заполните его последовательностью чисел Фибоначчи (длина последовательности передается в командной строке). Напишите цикл, который при каждой итерации получает два последние элемента стека и заносит в стек новый элемент.

8. Отсортируйте случайную последовательность чисел, используя только три стека: source, sorted и losers. Исходная последовательность находится в стеке source. Занесите число с вершины source в стек sorted. Продолжайте извлекать числа из стека source, сравнивая их с вершиной стека sorted. Меньшее из двух чисел извлекается из своего стека и отправляется в стек losers. Когда стек source останется пустым, повторите процесс, используя стек losers вместо source и стек source вместо losers. Работа алгоритма должна завершиться тогда, когда все числа будут помещены в стек sorted.

9. Откройте текстовый файл, имя которого передается в командной строке. Прочитайте содержимое файла по словам. Используя контейнер multiset<string>, подсчитайте количество вхождений для каждого слова.

10. Измените программу WordCount.cpp так, чтобы вставка элементов в отображение осуществлялась функцией insert() вместо оператора [ ].

11. Создайте класс с операторными функциями operator< и ostream& operator . В переменной класса должен храниться приоритет. Напишите генератор, создающий объекты класса со случайными приоритетами. Заполните с его помощью контейнер priority queue, после чего извлеките элементы и убедитесь в том, что они хранятся в правильном порядке.

12. Перепишите программу Ring.срр так, чтобы в ее базовой реализации вместо списка использовался дек.

13. Измените программу Ring.срр так, чтобы ее базовая реализация выбиралась при помощи аргумента шаблона (пусть аргументом по умолчанию является list).

14. Создайте класс итератора BitBucket, который просто поглощает все передаваемые данные, никуда не записывая их.

15. Запрограммируйте разновидность игры виселица . Создайте класс с переменными char и bool (логический признак, указывающий, угадывалась ли данная буква). Случайным образом выберите слово из файла и прочитайте его в вектор нового типа. В цикле запрашивайте символы у пользователя; после каждого введенного символа отображайте слово с угаданными символами (символы, которые еще не были угаданы, заменяются подчеркиваниями). Выберите исходное значение счетчика и уменьшайте его с каж-



дым вводимым символом. Если пользователь сможет угадать все слово раньше, чем счетчик упадет до нуля, он выиграл.

16. Откройте файл и прочитайте его в один объект string. Преобразуйте строку в stringstream. Организуйте чтение лексем из stringstream в list<string> с использованием итератора Tokenlterator.

17. Сравните эффективность контейнера stack в зависимости от выбора базовой реализации (вектор, дек или список).

18. Создайте шаблон для реализации односвязного списка SList. Определите конструктор по умолчанию, а также функции begin(), end() (с использованием соответствующего вложенного итератора), insert(), erase() и деструктор.

19. Сгенерируйте последовательность случайных целых чисел, сохраните ее в массиве int. Инициализируйте valarray<int> содержимым массива. Вычислите сумму, минимальное и максимальное значения, среднее арифметическое и медиану целых чисел средствами контейнера valarray.

20. Создайте два объекта valarray<int> с 12 и 20 случайными числами int. Первый объект valarray интерпретируется как матрица int 3 х 4, а второй - как матрица int 4 х 5. Перемножьте объекты по правилам умножения матриц. Результат должен храниться в объекте valarray<int> с 15 элементами, представляющем матрицу 3x5. Умножение строк первой матрицы на столбцы второй должно производиться с использованием срезов. Выведите результат в виде прямоугольной матрицы.



1 ... 130 131 132 [ 133 ] 134 135 136 ... 196

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика