127 lines
4.1 KiB
Markdown
127 lines
4.1 KiB
Markdown
|
# $I$. Introduction to C++
|
|||
|
## § 1.2 Types and their supported operations.
|
|||
|
|
|||
|
static typization $:=$ тип переменной определяется на этапе компиляции
|
|||
|
|
|||
|
Integral types:
|
|||
|
```C++
|
|||
|
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:
|
|||
|
```C++
|
|||
|
float x; //4b
|
|||
|
double x; //8b
|
|||
|
long double x; //16b
|
|||
|
```
|
|||
|
Хранятся они в формате sign (1 bit) mantissa exponent, то есть число хранится как mantissa * 2^exponent * sign
|
|||
|
|
|||
|
Все, что выше - это фундаментальные типы. Рассмотрим что-то более комплексное
|
|||
|
```C++
|
|||
|
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 отсутствует, потому что это дорого).
|
|||
|
|
|||
|
Литералы
|
|||
|
```C++
|
|||
|
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)
|
|||
|
|
|||
|
```C++
|
|||
|
#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() {
|
|||
|
;
|
|||
|
}
|
|||
|
```
|