Стандарт C++ 11

auto

Цель этого урока - дать вам сведения о языке программирования C/C++ в достаточной мере для решения на нём олимпиадных задач (создания консольных приложений с вводом-выводом при помощи текстовых файлов).

Преимущества и недостатки языка C/C++

Преимущества:

  1. Скорость работы итоговой программы (по сравнению с Java / Python).
  2. Прямое управление димамической памятью, что опять же важно для скорости работы.

Недостатки:

  1. Трудный для понимания синтаксис, который вызывает ошибки. Близкие по обозначению разнонаправленные операции (можно спутать).
  2. 3 основных операции (присваивание, инкрементация, декрементация) в сочетании с другими операциями предполагает создание сложных для чтения выражений (усложняет диагностику).
  3. Необходимо очень внимательно работать с указателями, ссылками, динамической памятью, проверять не происходит ли выход за границы массива.

Установка интерпретатора MinGW

Официальный сайт: http://www.mingw.org

Установка под Linux: обычно компилятор GNU C/C++ входит в дистрибутив и устанавливается при установке Linux. Установить в любой момент можно командой: sudo apt-get install g++

Установка под Windows:

Скачать на странице http://sourceforge.net/projects/mingw/files/ инсталлятор mingw-get-inst-_версия_.exe и запустить его (он скачает все нужные компоненты с интернета).

mingw1

Нажимаем Next >

mingw - шаг 2

Нам предлагают выбор:

Поскольку мы только скачали инсталлятор, разницы нет. Нажимаем Next >

MinGW - шаг 3

MinGW распространяется под лицензией GNU GPL (GNU General Public License), нам нужно с ней согласиться, чтобы установить MinGW, выбираем "I accept the agreement" (я принимаю соглашение).

MinGW - шаг 4

Выбор каталога установки, я оставляю "по-умолчанию" С:\MinGW чтобы не менять пути в различных скриптах. Next >.

MinGW 5

Как назвать ярлык MinGW в кнопке Пуск. Мне трудно представить ситуацию когда нужно менять это значение :) Нажимаем Next >.

MinGW 6

Выбираем компоненты для установки C / C++.

5

Инсталлятор показывает нам выбранные пакеты. Нажимаем Install, начинают скачиваться пакеты.

9

Пакеты скачиваются и устанавливаются.

MinGW 9

Всё, нажимаем Finish.

Теперь надо добавить в переменную окружения PATH пути к компиляторам C:\MinGW\bin. Для вызова окна со свойствами системы нажмите Win + Pause, выберите "Дополнительные параметры системы".

path2

Ввод / вывод при помощи потоков

sum_int64.cpp

Форматирование до заданного числа знаков:

#include <iostream>
#include <iomanip>

using namespace std;

int main(){
  double x = 3.14159265358;
  cout << x << endl; // Вывод: 3.14159
  cout << setiosflags(ios::fixed) << setprecision(2) << x << endl; // Вывод: 3.14
  return 0;
}

Типы данных языка C/C++

В С++ имеется набор встроенных типов данных для представления целых и вещественных чисел, символов, а также тип данных “символьный массив”, который служит для хранения символьных строк. Тип char служит для хранения отдельных символов и небольших целых чисел. Он занимает один машинный байт. Типы short, int и long предназначены для представления целых чисел. Эти типы различаются только диапазоном значений, которые могут принимать числа, а конкретные размеры перечисленных типов зависят от реализации. Обычно short занимает половину машинного слова, int – одно слово, long – одно или два слова. В 32-битных системах int и long, как правило, одного размера.

Типы float, double и long double предназначены для чисел с плавающей точкой и различаются точностью представления (количеством значащих разрядов) и диапазоном. Обычно float (одинарная точность) занимает одно машинное слово, double (двойная точность) – два, а long double (расширенная точность) – три. char, short, int и long вместе составляют целые типы, которые, в свою очередь, могут быть знаковыми (signed) и беззнаковыми (unsigned). В знаковых типах самый левый бит служит для хранения знака (0 – плюс, 1 – минус), а оставшиеся биты содержат значение. В беззнаковых типах все биты используются для значения. 8-битовый тип signed char может представлять значения от -128 до 127, а unsigned char – от 0 до 255.

Когда в программе встречается некоторое число, например 1, то это число называется литералом, или литеральной константой. Константой, потому что мы не можем изменить его значение, и литералом, потому что его значение фигурирует в тексте программы. Литерал является неадресуемой величиной: хотя реально он, конечно, хранится в памяти машины, нет никакого способа узнать его адрес. Каждый литерал имеет определенный тип. Так, 0 имеет тип int, 3.14159 – тип double.

Целочисленные типы

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:

Вещественные типы

Логические типы

Символьные типы

Строчные типы

Работа с классами

#include <iostream>
#include <conio.h>

using namespace std;

// === Объявление всех классов ===
class Pair {
private: // Метка доступа private - доступно только в пределах класса
  int x,y; // Объявили два поля: x и y. Они имеют целый тип (int)
public: // Метка доступа. public - всё что будет перечислено далее открыто для всех
  void init(int _x, int _y){
    x = _x; y = _y;
  }

  friend void print(ostream& os,Pair& pair){
    os << " (" << pair.x << ", " << pair.y << ") ";
  }

  friend ostream& operator<<(ostream& os,Pair& pair){
    os << " (" << pair.x << ", " << pair.y << ") ";
    return os;
  }
};

int main(int argc, char* argv[]) {
  // Использование класса
  Pair p;
  p.init(2,3); // Пользуемся методом init для заполнения закрытых полей класса
  print(cout,p);

  getch();
  return 0;
}

Структуры (записи) в C/С++

// Структура (запись): поля разного типа под одним именем
#include <stdio.h>

struct Point {
    int x, y;
};

int main(void) {
    struct Point p = {3, 4};       // инициализация полей по порядку
    p.x = 5;                       // обращение к полю через точку
    printf("%d %d\n", p.x, p.y);   // 5 4
    return 0;
}

Перечисления в C/C++

#include <iostream>
#include <vector>

using namespace std;

int main(){
  vector <int> v;
  vector <int> v(количество);

  v.push_back([выражение]);
  v.resize([количество]);
  v.size(); // Возвращает количество элементов в векторе (размер массива)
}
enum [имя]