I. Introduction to C++

§ 1.2 Types and their supported operations.

static typization := тип переменной определяется на этапе компиляции

Integral types:

int x; //4
long x; //4
long long x; //8
short x; //2
char x; //? 1
bool x; //?? 1
int8_t x;
int16_t x;
int32_t x;
int64_t x; //стандартизованные типы про которые гарантируется их ширина
int128_t x; //есть аналоги с u
std::byte x; //аналогично char
size_t x; //==ull

Floating point types:

float x; //4b
double x; //8b
long double x; //16b

Хранятся они в формате sign (1 bit) mantissa exponent, то есть число хранится как mantissa * 2^exponent * sign

Все, что выше - это фундаментальные типы. Рассмотрим что-то более комплексное

std::string s = "abc";
s[1] == 'b';
s[3] == (char)0; //string - это null termindated string - после данных стандарт гарантирует присутствие символа 0
s[4]; //ub
.at()
+ +=
.push_back()
.pop_back()
.front()
.back()
.size()
std::vector<int> v;
//push_back работает амортизированно за O(1), но гарантируется за O(n)
//аналогично string без + и +=
.shrink_to_fit()
.clear()
//просто делает из старых элементов ub, но память никак не освобождает
.reserve(n)
//предывделить память до n, но не кладет туда элементы (обращение туда все еще ub)
.resize(n, x)
//дропунть лишнее, если есть, если нет, то заполнить все остальное нулями
.capacity()
//size под выделенную память
std::list<int> l; //useless
std::forward_list<int> fl; //useless
std::deque<int> d; //страшная вещь внутри, которую нужно будет реализовать
std::stack<int> s; //deque внутри
std::queue<int> q; //deque внутри
std::priority_queue<int> pq; //deque с make_heap-ом внутри
std::map<int, int> m; //rbt
m.at(key); //возвращает exception, если нет ключа 
m.find(key); //возвращает итератор или m.end, если не находит
m.insert(pair<key, val>);
erase(map::iter);

std::multimap<key, val> mm; //это multiset, который map.........
std::unordered_map<key, val> um; //хэш-таблица
//работает В СРЕДНЕМ (не амортизированно) за O(1)
//то есть гарантируется, что работает за O(1) на рандомном наборе данных, а амортизированно - это значит, что работает быстро гарантированно
std::istream is; //поток ввода
std::ostream os; //поток вывода

“Эффективность дороже безопасности”. Любая проверка на ub отсутствует, потому что это дорого).

Литералы

5u;
1'000'000'057;
0.2f;
"abc";
'a';
//integer promotions - это когда ты складываешь int и long long, то получится long long и все будет корректно
//Есть аналогичное floating point promotion
//int + uint = uint
0xff == 255; //16-иричный
0123 == 83; //8-иричный
0b101 == 5; //2-ичный

§1.1 Знакомство с терминалом

pwd - print working directory
cd -  вернуться в предыдущее пространство 

§1.3 Declarations, definitions and scopes.

На глобальном уровне (вне какой-либо другой сущности) все действия - это объявления чего либо (класса, функции, переменной etc)

#include <iostream>

int a;

void f(int x);

class C;
struct S;
enum E;
union U;

namespace N {
    int x;
}

namespace N {
    int y;
}

using ll = long long;

int main() {
    ;
}