Знакомство с итераторами и алгоритмами
STL1Iter1°. Дан набор целых чисел. Найти количество нулей в исходном наборе. Использовать итератор ptin_iterator и алгоритм count.
STL1Iter2°. Дан текстовый файл с именем name, содержащий строковые представления вещественных чисел. Найти количество положительных чисел в исходном файле. Использовать итератор istream_iterator и алгоритм count_if. Указание. Если компилятор поддерживает стандарт C++11, то в качестве функционального объекта используйте лямбда-выражение [](double e){ return e > 0; } , указав его в списке параметров алгоритма.
В противном случае используйте функцию f , описав ее перед функцией Solve как bool f(double e){ return e > 0; } .
STL1Iter3°. Дан текстовый файл с именем name, содержащий английские слова. Найти количество слов длины 6. Использовать итератор istream_iterator и алгоритм count_if. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
STL1Iter4°. Дан набор вещественных чисел. Вывести все элементы этого набора в том же порядке. Использовать итераторы ptin_iterator, ptout_iterator и алгоритм copy.
STL1Iter5°. Дан текстовый файл с именем name, содержащий строковые представления целых чисел. Вывести все числа из файла в том же порядке. Использовать итераторы istream_iterator, ptout_iterator и алгоритм copy.
STL1Iter6°. Дана строка name и набор символов. Записать в текстовый файл с именем name исходный набор символов в том же порядке, добавляя после каждого символа пробел. Использовать итераторы ptin_iterator, ostream_iterator и алгоритм copy.
STL1Iter7°. Дан текстовый файл с именем name1, содержащий строковые представления целых чисел, и строка name2. Записать в текстовый файл с именем name2 все ненулевые числа из исходного файла в том же порядке, располагая каждое число на новой строке. Использовать итераторы istream_iterator, ostream_iterator и алгоритм remove_copy.
STL1Iter8°. Дано целое число K (> 0), текстовый файл с именем name1, содержащий английские слова, и строка name2. Записать в текстовый файл с именем name2 все слова из исходного файла, длина которых не превосходит K, сохранив исходный порядок их следования и располагая каждое слово на новой строке. Использовать итераторы istream_iterator, ostream_iterator и алгоритм remove_copy_if. Указание. Если компилятор поддерживает стандарт C++11, то в качестве функционального объекта используйте лямбда-выражение с захваченной внешней переменной k , указав это лямбда-выражение в списке параметров алгоритма: [k](string e){ return e.length() > k; } .
В противном случае используйте структуру f , которая описывается перед функцией Solve , содержит поле len и операцию (), определенную следующим образом: bool operator()(string e){ return e.length() > len; } . В алгоритме указывается конструктор f(k) , инициализирующий поле len значением k .
STL1Iter9°. Дан текстовый файл с именем name, содержащий строковые представления целых чисел. Вывести числа из исходного файла с нечетными порядковыми номерами (т. е. первое число, третье число и т. д.). Использовать итераторы istream_iterator, ptout_iterator и алгоритм remove_copy_if. Указание. Если компилятор поддерживает стандарт C++11, то в качестве функционального объекта используйте лямбда-выражение с внешней переменной num , захваченной по ссылке: [&num](int e){ return num++ % 2 == 0; } (перед вызовом алгоритма переменная num должна быть инициализирована значением 1).
В противном случае используйте структуру f , которая описывается перед функцией Solve , содержит поле num и операцию (), определенную следующим образом: bool operator()(int e){ return return num++ % 2 == 0; } . В алгоритме указывается конструктор f(1) , инициализирующий поле num значением 1.
STL1Iter10°. Дан набор вещественных чисел, содержащий не менее двух элементов. Вывести числа из исходного набора с четными порядковыми номерами (т. е. второе число, четвертое число и т. д.). Использовать итераторы ptin_iterator, ptout_iterator и алгоритм remove_copy_if.
STL1Iter11°. Решить задачу STL1Iter7, используя вместо алгоритма remove_copy цикл for с параметром-итератором. Указание. Опишите итератор out типа ostream_iterator и организуйте цикл for с параметром-итератором in типа istream_iterator и операцией инкремента in++ . В цикле выполняйте проверку введенного числа *in и в случае, если оно удовлетворяет требуемому условию, выполняйте оператор out = *in . Выражение *in можно использовать многократно; оно всегда будет соответствовать последнему прочитанному элементу данных (чтение очередного элемента выполняется при создании объекта istream_iterator и при выполнении операции инкремента).
STL1Iter12°. Решить задачу STL1Iter8, используя вместо алгоритма remove_copy_if цикл for с параметром-итератором. Указание. Ср. с задачей STL1Iter11.
STL1Iter13°. Решить задачу STL1Iter9, используя вместо алгоритма remove_copy_if цикл for с параметром-итератором. Указание. Опишите итератор out типа ptout_iterator и организуйте цикл for с параметром-итератором in типа istream_iterator и операцией инкремента in++ . В цикле выполняйте оператор out = *in++ .
STL1Iter14°. Решить задачу STL1Iter10, используя вместо алгоритма remove_copy_if цикл for с параметром-итератором. Указание. Ср. с задачей STL1Iter13. В данном случае надо использовать цикл с параметром in типа ptin_iterator.
STL1Iter15°. Дана строка name и набор целых чисел. Записать в текстовый файл с именем name все числа из исходного набора в том же порядке, заменяя каждое число 0 на число 10 и добавляя после каждого числа два пробела. Использовать итераторы ptin_iterator, ostream_iterator и алгоритм replace_copy.
STL1Iter16°. Дан набор символов. Вывести все символы из исходного набора в том же порядке, заменяя цифровые символы на символ подчеркивания. Использовать итераторы ptin_iterator, ptout_iterator и алгоритм replace_copy_if. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
STL1Iter17°. Дана строка name и набор символов. Записать в текстовый файл с именем name удвоенные кодовые значения всех символов из исходного набора в том же порядке, добавляя после каждого числа один пробел. Использовать итераторы ptin_iterator, ostream_iterator и алгоритм transform. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
STL1Iter18°. Дана строка name и целое число K (> 0). Записать в текстовый файл с именем name K символов «*». Использовать итератор ostream_iterator и алгоритм fill_n.
STL1Iter19°. Даны вещественные числа A, D и целое число N. Вывести N первых членов арифметической прогрессии с первым элементом A и разностью D. Использовать итератор ptout_iterator и алгоритм generate_n. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter9. В данном случае лямбда-выражение должно содержать внешнюю переменную D , захваченную по значению, и еще одну вспомогательную вещественную переменную, захваченную по ссылке и соответствующую текущему элементу прогрессии. Если в качестве функционального объекта используется структура, то она должна содержать два поля (которые соответствуют разности и текущему элементу прогрессии).
STL1Iter20°. Дана строка name и целое число N (1 ≤ N ≤ 26). Записать в текстовый файл с именем name N начальных прописных букв латинского алфавита. Использовать итератор ostream_iterator и алгоритм generate_n. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter9.
STL1Iter21°. Даны два текстовых файла с именами name1 и name2, содержащие строковые представления целых чисел, причем в каждом файле числа располагаются по убыванию. Вывести все числа из исходных файлов в виде единой последовательности, упорядоченной по убыванию. Использовать итераторы istream_iterator, ptout_iterator и алгоритм merge с параметром — функциональным объектом. Указание. В данном случае не требуется применять ни лямбда-выражение, ни специально описанный функциональный объект. Достаточно указать стандартный функциональный объект greater<int>() , реализующий операцию > («больше»). Парным к нему является функциональный объект less , который реализует операцию < («меньше») (операция < используется по умолчанию во многих алгоритмах).
STL1Iter22°. Даны два текстовых файла с именами name1 и name2, содержащие английские слова, причем в каждом файле слова располагаются по возрастанию длины, а слова равной длины — в лексикографическом порядке. Вывести все слова из исходных файлов в виде единой последовательности, упорядоченной таким же образом, как и исходные файлы. Использовать итераторы istream_iterator, ptout_iterator и алгоритм merge с параметром — функциональным объектом. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
STL1Iter23°. Даны два текстовых файла с именами name1 и name2, содержащие одинаковое количество строковых представлений вещественных чисел. Вывести разности B1 − A1, B2 − A2, …, BN − AN, где N — количество чисел в каждом файле, A1, A2, …, AN — числа из файла name1, а B1, B2, …, BN — числа из файла name2. Использовать итераторы istream_iterator, ptout_iterator и алгоритм transform. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
STL1Iter24°. Дан текстовый файл с именем name1, содержащий английские слова, строка name2 и набор английских слов, размер которого не превосходит количество слов, содержащихся в файле name1. Записать в текстовый файл с именем name2 все слова из исходного набора, дополнив каждое слово символом «-» (дефис) и словом из файла name1 с тем же порядковым номером (если файл name1 содержит больше слов, чем исходный набор, то лишние слова в файле игнорируются). Каждое дополненное слово записывать в файл с новой строки. Использовать итераторы ptin_iterator, istream_iterator, ostream_iterator и алгоритм transform. Указание. Рекомендации по использованию функциональных объектов приведены в указании к STL1Iter2.
|