Группа Михайлова — различия между версиями

Материал из SEWiki
Перейти к: навигация, поиск
(Smar pointers)
(Smar pointers)
Строка 104: Строка 104:
 
* >=
 
* >=
  
=Smar pointers=
+
=Smart pointers=
 
Реализовать шаблонный scoped_ptr
 
Реализовать шаблонный scoped_ptr
 
[http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/scoped_ptr.htm]
 
[http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/scoped_ptr.htm]

Версия 23:29, 12 декабря 2012

Общее

Результаты

Интересные ссылки

O typename

Об арифметике с плавающей запятой

Задания

Компиляция

Напишите псевдо код на основе ассемблерного кода в который разворачивается инструкция for:

for (int i = 0; i < N; ++i) {
//body
}

Пример псевдокода:

if (a == 5) goto mark1
something
mark1:

Чем плоха конструкция

 #define MAX(a, b) a > b ? a : b

Приведите пример ее некорректного использования. (Возврат не максимального значения, побочные эффекты) Как можно ее улучшить?

Как работает линковка? Какую роль в ней играет relocation table

Сортировка слиянием

Реализуйте алгоритм merge sort

Выделение памяти

Создайте двумерный массив двумя способами. 1) Используя N + 1 аллокацию 2) Используя 2 аллокации Замерьте, при каких значениях размера массива происходит экстерминатус? (Компилируйте 32 разрядную версию. 64 может и не упасть) Какой вариант работает быстрее? Подумайте, почему это происходит. Обращаю внимание, что оба варианта созданных матриц должны иметь тип int**

Усложненное задание - сделать матрицы трегольными и написать процедуру, сливающие 2 такие матрицы в прямоугольную

Расширяющийся массив

Реализуйте класс расширяющегося массива. Size - количество элементов в массиве. Capacity - вместимость массива. Size <= Capacity Если при добавлении очередного элемента Size превышает Capacity, то Capacity следует увеличить вдвое

struct Array {
  Array(size_t capacity = 3);
  Array(Array & array);
  ~Array();
  Array & operator=(Array & array);
  size_t Size();
  size_t Capacity();
  void Add(int value);
  int Get(size_t index);
  void Set(size_t index, int value);
  void Swap(Array & array);
 private:
  int* myData;
  size_t mySize;
  size_t myCapacity;
};

Обертка над FILE

String

Реализовать класс String со следующими методами/требованиями

String()
String(String &)
String(char *)
operator=(String &)
operator=(char *) //реализовывать не нужно. Объясните, почему?
append(String &)
char ? at(size_t) // реализовать в двух версиях. Константную и не константную
char * c_str() - возвращает обычную нуль-терминированную строку

Данные хранить как буффер для строки и ее размер. Строку хранить НЕ как нуль-терминированную. В приведенном выше ключевое слово const не используется умышленно.

Дополнительное задание - реализовать строку с таким же интерфейсом, но реализующую стратегию Copy On Write (COW)

Smart FILE

Rational

Напишите класс работающий с рациональными числами и определите следующие операторы:

  • ostream <<
  • istream >>
  • +=
  • -=
  • *=
  • /=
  • +
  • - бинарный
  • - унарный
  • *
  • /
  • ++ префиксный
  • ++ постфиксный
  • -- префиксный
  • -- постфиксный
  • ==
  •  !=
  • <
  • >
  • <=
  • >=

Smart pointers

Реализовать шаблонный scoped_ptr [1]