Поделиться Поделиться

Листинг 5.5. Стандартные алгоритмы

#include <iostream>

#include <vector>

#include <numeric>

#include <algorithm>

using namespace std;

//функция отображения элементов вектора в обратном порядке;

void rshow (vector<int> & v)

{

vector<int>::reverse_iterator riter; //реверсивный итератор;

for (riter = v.rbegin(); riter < v.rend(); riter++)

cout << *riter << " ";

cout << endl;

}

int main (void)

{

const int size = 9;

vector<int> vect1;

vector<int> vect2(size);

for (int i = 1; i <= size; i++)

vect1.push_back(i);

rshow(vect1);

//подсчет суммы значений элементов;

cout << accumulate(vect1.begin(), vect1.end(), 0) << endl;

//сортировка по возрастанию;

sort(vect1.begin(), vect1.end(), greater<int>());

rshow(vect1);

//заполнение второго вектора элементами из первого;

copy(vect1.begin(), vect1.end(), vect2.begin());

rshow(vect2);

//поэлементное сравнение векторов;

cout << boolalpha << equal(vect1.begin(), vect1.end(), vect2.begin()) << endl;

const int elem = 5;

//удаление из вектора элемента со значением elem;

remove(vect1.begin(), vect1.end(), elem);

rshow(vect1);

//определение наличия элемента со значением elem;

if (find(vect1.begin(), vect1.end(), elem ) == vect1.end())

cout << "there is no \'" << elem << "\' element" << endl;

return 0;

}

Следует заметить, что вектор может быть и многомерным. Для этой цели в качестве типа вектора указывается не встроенный тип, а очередной вектор.

Листинг 5.6. Многомерный вектор.

#include <iostream>

#include <vector>

using namespace std;

int main(void)

{

const int size = 5;

//пять подвекторов;

vector<vector<int> > ivec(size);

//пять элементов в каждом подвекторе;

for (int i = 0; i < size; i++)

ivec[i].resize(size);

ivec[2][2] = 1;

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

cout << ivec[i][j] << " ";

}

cout << endl;

}

return 0;

}

5.6. Упражнения

Выполнить без использования обобщенных алгоритмов, лишь методами класса «string» или «vector».

5.6.1. Класс «string»

В введенном с клавиатуры тексте, состоящем из нескольких слов и оканчивающимся точкой, как символом – ограничителем.

1. Найти все повторяющиеся слова.

2. Удалить из текста все символы, встречающиеся в первом слове.

3. Составить строку из символов, повторяющихся в каждом отдельном слове.

4. Найти все слова, длинна которых меньше четырех символов.

5. Отобразить зеркально все слова, состоящие из четного количества символов.

6. Найти все слова, которые являются частью другого слова.

7. Поменять попарно местами символы во всех словах.

8. Удалить из последнего слова все символы, встречающиеся в других словах.

9. Отобразить текст зеркально.

10. Найти все неповторяющиеся слова.

11. Удалить все повторяющиеся в слове символы, оставив первое вхождение.

12. Поменять попарно местами все слова текста.

13. Найти все слова, длинна которых составляет пять символов.

14. Удалить из последнего слова все символы, невстречающиеся в других словах.

15. Составить строку из слов, несодержащих повторяющихся символов.

16. Найти все слова, часть которых является другим словом.

17. Составить строку из символов, неповторяющихся в каждом отдельном слове.

18. Удалить из текста все символы, невстречающиеся в первом слове.

19. Упорядочить слова текста в лексикографическом порядке.

20. Посчитать частоту встречаемости каждого символа из текста.

5.6.2. Класс «vector»

1. Выполнить с применением векторов задания из раздела «3.8.1. Статические и динамические массивы».

2. Выполнить с применением векторов задания из раздела «3.8.2. Многомерные массивы».

6. Файловый ввод – вывод

6.1. Операции

При работе с файлами используется библиотека «fstream», в которой описаны классы «ofstream» и «ifstream». Экземпляры этих классов предоставляют потоковый способ работы с файлами. Он осуществляется посредством операторов «>>» и «<<» и различных методов, описанных далее.

← Предыдущая страница | Следующая страница →