Стандарт C++ 11
auto
Цель этого урока - дать вам сведения о языке программирования C/C++ в достаточной мере для решения на нём олимпиадных задач (создания консольных приложений с вводом-выводом при помощи текстовых файлов).
Преимущества и недостатки языка C/C++
Преимущества:
- Скорость работы итоговой программы (по сравнению с Java / Python).
- Прямое управление димамической памятью, что опять же важно для скорости работы.
Недостатки:
- Трудный для понимания синтаксис, который вызывает ошибки. Близкие по обозначению разнонаправленные операции (можно спутать).
- 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 и запустить его (он скачает все нужные компоненты с интернета).

Нажимаем Next >

Нам предлагают выбор:
- использовать версию компонент соответствующую этому инсталлятору;
- скачать самую последнюю версию.
Поскольку мы только скачали инсталлятор, разницы нет. Нажимаем Next >

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

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

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

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

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

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

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


Ввод / вывод при помощи потоков
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.
Целочисленные типы
- char - 8-битный знаковый тип.
- short - 16-битный знаковый тип.
- int - 32-битный знаковый тип.
- long - 64-битный знаковый тип.
Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:
- signed - знаковый.
- unsigned - беззнаковый.
Вещественные типы
- float - 32-битный знаковый тип.
- double - 64-битный знаковый тип.
Логические типы
- bool - принимает два значения - "true" или "false".
Символьные типы
- char - 16-битный Unicode-символ.
Строчные типы
- Строки реализованы как массив символов char[].
Работа с классами
#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 [имя]