C++ группа 2 — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(занятие 12.02.2016)
 
(не показано 8 промежуточных версий этого же участника)
Строка 24: Строка 24:
 
   T const& operator[]( size_t i ) const;
 
   T const& operator[]( size_t i ) const;
 
   size_t  size() const;
 
   size_t  size() const;
  void resize( size_t size ) { size_ = size; }
 
 
  };
 
  };
  
Строка 41: Строка 40:
 
     size_t size();
 
     size_t size();
 
  };
 
  };
 +
 +
== 19.02.2016 ==
 +
 +
Реализовать вектор со строгой гарантией исключений для push_back
 +
 +
template <class T>
 +
class Vector
 +
{
 +
public:
 +
  operator[]()
 +
  push_back()
 +
  pop_back()
 +
  size()
 +
  reserve()
 +
  resize()
 +
};
 +
 +
 +
== 26.02.2016 ==
 +
[[File:Template_multimethods.pdf]]
 +
 +
== 04.03.2016 ==
 +
 +
== 11.03.2016 ==
 +
 +
template <class T>
 +
class deque
 +
{
 +
public:
 +
  operator[]()
 +
  push_back()
 +
  pop_back()
 +
  push_front()
 +
  pop_fron()
 +
  size()
 +
  begin()
 +
  end()
 +
  rbegin()
 +
  rend()
 +
};
 +
 +
push_back и push_front инвалидируют итераторы, но никогда не вызывают конструкторов копирования для '''T'''
 +
 +
Итераторы должны работать со стандартными алгоритмами. Для проверки вызвать std::sort.
 +
 +
'''hint''': std::iterator, std::iterator_traits.
 +
 +
== 18.03.2016 ==
 +
 +
Стандартные алгоритмы и функторы. На протяжении всего занятия запрещается использовать for, do, while и goto.
 +
 +
# Посчитать сколько раз во входном файле встречается каждое из слов и вывести статистику в выходной файл (выполнить без лямбд)
 +
# Обрезать пробелы у строки слева и справа
 +
# quick sort
 +
# gather. Собрать все элементы по заданному предикату подряд в какой то точке контейнера
 +
[[File:Gather.png|400px|thumb|center||Gather example]]
 +
 +
'''hints''': for_each, transform, distance, next, find_if, nth_element, istream_iterator, ostream_iterator, stable_partition,rotate
 +
 +
== 25.03.2016 ==
 +
 +
Реализовать утилиту, которая по заданому пути рекурсивно выведет структуру каталогов/файлов.
 +
Дополнение: раскрасить директории в синий, исполняемые файлы - в зеленый.
 +
 +
Будем использовать boost-filesystem
 +
 +
Установка
 +
sudo apt-get install libboost-filesystem-dev
 +
 +
Компиляция примеров
 +
g++ main.cpp -lboost_system -lboost_filesystem
 +
 +
референсы
 +
http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/tutorial.html
 +
http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/reference.html
 +
 +
ключевые слова
 +
path
 +
directory_iterator
 +
is_directory
 +
is_regular_file

Текущая версия на 10:58, 25 марта 2016

Опейкин Александр

+7-931-278-21-60

alexander.opeykin@gmail.com

Группа

5.12.2015

Данные Файл:Schemed read data.gz Файл:New data.tgz

12.02.2016

Реализовать 3 класса

1. Массив фиксированного(на этапе компиляции) размера

template <...>
class Array 
{
public:
  Array() {}
  T &      operator[]( size_t i );
  T const& operator[]( size_t i ) const;
  size_t  size() const;
};

2. Специализацию массива Array для bool. Один bool должен занимать один бит.

3. Стек. Должен уметь работать поверх вашего Array

template <...>
class Stack 
{
public: 
   T const& top() const;
   T &      top();
   void push(T const& t);
   void pop();    
   bool empty();
   size_t size();
};

19.02.2016

Реализовать вектор со строгой гарантией исключений для push_back

template <class T>
class Vector
{
public:
  operator[]()
  push_back()
  pop_back()
  size()
  reserve()
  resize()
};


26.02.2016

Файл:Template multimethods.pdf

04.03.2016

11.03.2016

template <class T>
class deque
{
public:
  operator[]()
  push_back()
  pop_back()
  push_front()
  pop_fron()
  size()
  begin()
  end()
  rbegin()
  rend()
};

push_back и push_front инвалидируют итераторы, но никогда не вызывают конструкторов копирования для T

Итераторы должны работать со стандартными алгоритмами. Для проверки вызвать std::sort.

hint: std::iterator, std::iterator_traits.

18.03.2016

Стандартные алгоритмы и функторы. На протяжении всего занятия запрещается использовать for, do, while и goto.

  1. Посчитать сколько раз во входном файле встречается каждое из слов и вывести статистику в выходной файл (выполнить без лямбд)
  2. Обрезать пробелы у строки слева и справа
  3. quick sort
  4. gather. Собрать все элементы по заданному предикату подряд в какой то точке контейнера
Gather example

hints: for_each, transform, distance, next, find_if, nth_element, istream_iterator, ostream_iterator, stable_partition,rotate

25.03.2016

Реализовать утилиту, которая по заданому пути рекурсивно выведет структуру каталогов/файлов. Дополнение: раскрасить директории в синий, исполняемые файлы - в зеленый.

Будем использовать boost-filesystem

Установка

sudo apt-get install libboost-filesystem-dev

Компиляция примеров

g++ main.cpp -lboost_system -lboost_filesystem

референсы

http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/tutorial.html
http://www.boost.org/doc/libs/1_60_0/libs/filesystem/doc/reference.html

ключевые слова

path
directory_iterator
is_directory
is_regular_file