Перейти до змісту

Задачі: Динамічний масив

Практичні задачі на тему динамічного масиву (int_vector).

Формат задач

У кожній задачі дано сигнатуру функції або методу. Потрібно написати реалізацію замість .... Всі функції — методи структури int_vector з лекції, якщо не вказано інше.


Середній рівень

Задача 1: pop_back

Видалити останній елемент вектора.

void pop_back() {
    ...
}

Задача 2: clear

Очистити вектор (size = 0), але не звільняти пам'ять.

void clear() {
    ...
}

Задача 3: is_empty

Повернути true, якщо вектор порожній.

bool is_empty() {
    ...
}

Задача 4: front

Повернути посилання на перший елемент.

int& front() {
    ...
}

Задача 5: back

Повернути посилання на останній елемент.

int& back() {
    ...
}

Середніший рівень

Задача 6: insert

Вставити значення на позицію index, зсунувши решту елементів вправо.

void insert(int index, int value) {
    ...
}

Задача 7: erase

Видалити елемент на позиції index, зсунувши решту елементів вліво.

void erase(int index) {
    ...
}

Задача 8: shrink_to_fit

Зменшити capacity до size, щоб не витрачати зайву пам'ять.

void shrink_to_fit() {
    ...
}

Задача 9: reserve

Гарантувати, що capacity >= n. Якщо вже достатньо — нічого не робити.

void reserve(int n) {
    ...
}

Задача 10: find

Знайти перше входження значення. Повернути індекс або -1, якщо не знайдено.

int find(int value) {
    ...
}

Задача 11: count

Порахувати, скільки разів значення зустрічається у векторі.

int count(int value) {
    ...
}

Дуже середній рівень

Задача 12: reverse

Розвернути вектор (перший елемент стає останнім і навпаки).

void reverse() {
    ...
}

Задача 13: unique

Видалити послідовні дублікати. Наприклад, [1, 1, 2, 2, 2, 3, 1][1, 2, 3, 1].

void unique() {
    ...
}

Задача 14: sort

Відсортувати вектор за зростанням (використай bubble sort).

void sort() {
    ...
}

Задача 15: char_vector

Створити окрему структуру char_vector для зберігання рядка символів. Реалізувати метод print_string, який виводить вміст як рядок.

struct char_vector {
    char* data;
    int size;
    int capacity;

    void print_string() {
        ...
    }
};

Прикладні задачі середнього рівня

Задача 16: read_and_max

Зчитати n чисел з stdin у вектор і знайти максимум. Це вільна функція.

int find_max(int_vector& v) {
    ...
}

Задача 17: read_until_zero

Зчитувати числа з stdin до тих пір, поки не введено 0. Зберегти у вектор і вивести у зворотньому порядку. Написати код у main.

int main() {
    ...
}

Задача 18: concat

Додати всі елементи з другого вектора в кінець першого.

void concat(int_vector& dst, int_vector& src) {
    ...
}

Задача 19: equals

Порівняти два вектори. Повернути true, якщо вони мають однаковий вміст.

bool equals(int_vector& a, int_vector& b) {
    ...
}

Задача 20: remove_all

Видалити всі входження заданого значення з вектора.

void remove_all(int value) {
    ...
}