Пытаемся выйти за пределы массива и получить segfault:
int *p = new int[3];
p[100] = 100;
Компилируем g++. Ничего не происходит. А все потому, что тут undefined behaviour, компилятор имеет право разбираться с проблемой как хочет. Вот тут об этом подробно (Accessing an array out of bounds gives no error, why?).
Делим на 0:
int x = 1/0;
Опять ничего! Программа компилируется, запускается.
Попробуем создать массив из минус одного элемента:
int *p = new int[-1];
Компилятор проглатывает без проблем. Но при запуске получаем исключение bad_alloc. Ура! Программа грохнулась!
четверг, 11 апреля 2019 г.
вторник, 2 апреля 2019 г.
std::set - как с ним работать?
Множество обладает свойством уникальности элементов. Как же там хранить какие-то сложные типы данных, как будут сравниваться элементы на равенство? Оказывается, в типе элементов просто нужно перегрузить оператор< . Вот простейший пример:
class mPair
{
int x, y;
public:
mPair(int a, int b)
{
x = a; y = b;
}
bool operator<(const mPair &p) const
{
return x
Оператор < обязательно должен быть оформлен именно таким образом - константный и с константным аргументом.
Кстати, вот статья с крайне подробным разбором std::set.
class mPair
{
int x, y;
public:
mPair(int a, int b)
{
x = a; y = b;
}
bool operator<(const mPair &p) const
{
return x
}
};
};
Оператор < обязательно должен быть оформлен именно таким образом - константный и с константным аргументом.
Кстати, вот статья с крайне подробным разбором std::set.
Подписаться на:
Сообщения (Atom)