Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Программирование – 2 курс осень 2020 – 8 занятие

ТиМПИ
November 05, 2020
130

Программирование – 2 курс осень 2020 – 8 занятие

ТиМПИ

November 05, 2020
Tweet

More Decks by ТиМПИ

Transcript

  1. dscs.pro spbu.ru 2/19 Воспоминания: платиновое правило vector<bool> v; — так

    делать не надо. 1. vector<bool> не содержит в себе bool-значений 2. vector<bool> не является вектором T *р = &с[0]; bool *pb = &v[0];
  2. dscs.pro spbu.ru 4/19 Bitset • Содержательно, bitset — «правильная» реализация

    vector<bool>. • Размер должен быть известен на момент компиляции. • Поддерживает строковое представление: bitset<7> b (51); cout << b << endl; Out: 0110011
  3. dscs.pro spbu.ru 5/19 Rope • Rope — массив с дополнительными

    возможностями. • Заголовочный файл (<ext/rope>) • Можно быстро переставлять отрезки. #include <ext/rope> using namespace __gnu_cxx; … rope <int> v; rope <int> subs = v.substr(l, r - l + 1); v.erase(l, r - l + 1); v.insert(v.mutable_begin(), cur);
  4. dscs.pro spbu.ru 6/19 Tuple • Tuple — расширенный pair. •

    Элементы могут иметь разные типы. • Обращение к элементу через get: get<2>(t);
  5. dscs.pro spbu.ru 7/19 Valarray • Valarray — «векторная» форма массивов.

    • Предназначен для математических вычислений. • Позволяет применять математические операции сразу ко всем элементам. valarray<int> array1(15), array2(15); valarray<int> array3 = array1 + array2; sqrt(array3);
  6. dscs.pro spbu.ru 9/19 Случайные числа • rand • mt19937 cout

    << rand(); mt19937 gen; cout << gen(); mt19937 gen; uniform_int_distribution<> uid(0, 50); cout << uid(gen);
  7. dscs.pro spbu.ru 15/19 Работа с сортированными интервалами • lower_bound •

    upper_bound • binary_search • equal_range • merge • includes • set_difference • set_intersection • set_symmetric_difference • set_union
  8. dscs.pro spbu.ru 16/19 Функции for_each и accumulate Используются для обобщения

    интервалов. stringLengthSum(size_t sum, const string& s) { return sum + s.size(); } set<string> s; accumulate(s.begin(), s.end(), 0, stringLengthSum);
  9. dscs.pro spbu.ru 17/19 std::ranges for(auto const i : v) {

    print (i); }; std::ranges::for_each(std::as_const(v), print);
  10. dscs.pro spbu.ru 18/19 Литература • Meyers S. Effective C++: 55

    specific ways to improve your programs and designs. • Meyers S. Effective STL: 50 specific ways to improve your use of the standard template library.