Главная страница
Навигация по странице:

  • Коды модулей С++ Упражнение 1.

  • Упражнение 2.

  • Упражнение 3.

  • Упражнение 4.

  • Скриншоты работы программ

  • Выводы по проделанной работе

  • чямывп. 9 лаба. Контейнеры vector, map и set. Итераторы. Алгоритмы


    Скачать 416.03 Kb.
    НазваниеКонтейнеры vector, map и set. Итераторы. Алгоритмы
    Анкорчямывп
    Дата09.03.2023
    Размер416.03 Kb.
    Формат файлаpdf
    Имя файла9 лаба.pdf
    ТипОтчет
    #976966

    МИНОБРНАУКИ РОССИИ
    САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
    ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
    «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
    Кафедра ФРТ
    ОТЧЕТ
    по лабораторной работе № 9
    по дисциплине «Информатика»
    Тема:
    Контейнеры vector, map и set. Итераторы. Алгоритмы.
    Студент гр. 1106:
    Иванчин А.В
    Преподаватель:
    Чиркунова А. А.
    Санкт-Петербург
    2022

    Цель работы
    Знакомство работы с контейнерами: vector, map, set.
    Теоретические сведения

    Контейнеры: o vector – это динамический массив, элементы которого размещаются последовательно в одной области памяти

    Инициализация:
    vector<тип данных> название переменной

    Доступ к элементам:
    mass[index] – доступ по индексу, без проверки диапазона
    mass.at(index) – доступ по индексу, с проверкой диапазона
    mass.front() – первый элемент
    mass.back() – последний элемент

    Итераторы
    mass.begin() – возвращает итератор на первый элемент
    mass.end() – возвращает итератор на последний элемент
    mass.rbegin() – возвращает итератор на последний элемент (для обратных
    алгоритмов)
    mass.rend() – возвращает итератор на первый элемент (для обратных
    алгоритмов)

    Размеры
    mass.empty() – возвращает true, если вектор пуст
    mass.size() – возвращает количество элементов
    mass.max_size() – возвращает максимально возможное количество элементов
    mass.reverse(n) – устанавливает минимальное количество элементов
    mass.capacity() – возвращает количество элементов, которое может вмещать до
    выделения большего количества памяти

    Модификаторы
    mass.clear() – удаление всех элементов
    mass.insert() – вставка элемента
    mass.erase() – удаление конкретного элемента
    mass.push_back() – добавление элемента в конец вектора
    mass.pop_back() – удаление последнего элемента
    mass.resize() – изменяет размер вектора
    mass.swap() – обмен содержимого двух векторов
    mass.count() – возвращает количество вхождений конкретного значения

    Операторы
    [] - индексация
    = - присвоение
    ==,!=,<,>,<=,>= - сравнения
    o map – это динамический ассоциативный массив

    Инициализация:
    map<тип данных1, тип данных> название переменной

    Итераторы
    s.begin() – возвращает итератор на первый элемент
    s.end() – возвращает итератор на последний элемент
    s.rbegin() – возвращает итератор на последний элемент (для обратных
    алгоритмов)
    s.rend() – возвращает итератор на первый элемент (для обратных алгоритмов)


    Размеры
    s.empty() – возвращает true, если map пуст
    s.size() – возвращает количество элементов
    s.max_size() – возвращает максимально возможное количество элементов

    Модификаторы
    s.clear() – удаление всех элементов
    s.insert() – вставка элемента
    s.erase() – удаление конкретного элемента
    s.swap() – обмен содержимого двух контейнеров
    s.count() – возвращает количество вхождений конкретного значения
    s.find() – нахождение элемента в контейнере
    s.lower_bound(a) – первый элемент, меньше a
    s.upper_bound(a) – первый элемент, больше a
    s.equal_range(a) – возвращает набор элементов для ключа a
    s.key_comp() – сортировка по ключу
    s. value_comp() – сортировка по значению
    o set – множество, динамический отсортированный массив

    Инициализация:
    set<тип данных> название переменной

    Итераторы
    mass.begin() – возвращает итератор на первый элемент
    mass.end() – возвращает итератор на последний элемент
    mass.rbegin() – возвращает итератор на последний элемент (для обратных
    алгоритмов)
    mass.rend() – возвращает итератор на первый элемент (для обратных
    алгоритмов)

    Размеры
    mass.empty() – возвращает true, если set пуст
    mass.size() – возвращает количество элементов
    mass.max_size() – возвращает максимально возможное количество элементов

    Модификаторы
    mass.clear() – удаление всех элементов
    mass.insert() – вставка элемента
    mass.emplace() – вставка элемента
    mass.erase() – удаление конкретного элемента
    mass.swap() – обмен содержимого двух векторов
    mass.count() – возвращает количество вхождений конкретного значения
    s.find() – нахождение элемента в контейнере
    s.lower_bound(a) – первый элемент, меньше a
    s.upper_bound(a) – первый элемент, больше a
    s.equal_range(a) – возвращает набор элементов для ключа a

    Операторы
    = - присвоение
    ==,!=,<,>,<=,>= - сравнения

    Алгоритмы – библиотека с набором различных стандартных алгоритмов
    (сортировки, поиски и т.д.)

    Итератор – тип данных iterator, обеспечивающий доступ к элементам в контейнерах.

    Коды модулей С++
    Упражнение 1.
    #include

    #include

    using namespace std; int main()
    { setlocale(
    LC_ALL
    ,
    "ru"
    ); vector
    <
    int
    > vector1; vector
    <
    int
    > vector2; int
    P, n, sr = 0, sred, K = 0; cout
    <<
    "Введите количество дней:
    "
    ; cin
    >>
    P; for
    (
    int i = 0; i < P; i++)
    { cin
    >>
    n; vector1.push_back(n);
    } for
    (
    int i = 0; i < P; i++)
    { sr += vector1
    [
    i
    ]
    ;
    } sred = sr / P; for
    (
    int i = 0; i < P; i++)
    { if
    (vector1
    [
    i
    ]
    > sred)
    {
    K++; vector2.push_back(i);
    };
    } for
    (
    int i = 0; i < K; i++) { cout
    <<
    K
    <<
    endl; cout
    <<
    vector2
    [
    i
    ]
    <<
    endl;
    } return
    0;
    }

    Упражнение 2.
    #include

    #include

    #include

    using namespace std; int main()
    { vector
    <
    double
    > temp; double
    N, element; double sum = 0; cin
    >>
    N; for
    (
    int i = 0; i < N; i++)
    { cin
    >>
    element; temp.push_back(element);
    } auto min_max = min_element(temp.begin(), temp.end()); cout
    <<
    *
    min_max
    <<
    ' '
    ; min_max
    =
    max_element(temp.begin(), temp.end()); cout
    <<
    *
    min_max
    <<
    endl; sort(temp.rbegin(), temp.rend()); for
    (
    auto q : temp)
    { cout
    <<
    q
    <<
    ' '
    ; sum += q;
    } cout
    <<
    endl
    <<
    count(temp.begin(), temp.end(), (sum
    / temp.size()))
    <<
    endl; for
    (
    auto q : temp)
    { if
    (q == (sum / temp.size())) cout
    <<
    0
    <<
    ' '
    ; else cout
    <<
    q
    <<
    ' '
    ;
    }

    Упражнение 3.
    #include

    #include

    #include

    #include

    #include

    using namespace std; void
    NEW_TEMP(
    map
    <
    string
    , vector
    <
    int
    >>& a
    )
    { string s; cin
    >>
    s; int
    K, L; cin
    >>
    K; for
    (
    int i = 0; i < K; i++)
    { cin
    >>
    L; a
    [
    s
    ]
    .push_back(L);
    }
    } void
    DEL_TEMP(
    map
    <
    string
    , vector
    <
    int
    >> &
    a
    )
    { string s; cin
    >>
    s; int
    K; cin
    >>
    K; int counter = 0; int index = 0; if
    (
    a
    .find(s)
    ==
    a
    .end())
    { cout
    <<
    "No day of week"
    <<
    endl;
    } else
    { for
    (
    int i = 0; i < a
    [
    s
    ]
    .size(); i++)
    { if
    (
    a
    [
    s
    ]
    .at(i) == K) { counter++; index = i;
    }
    } if
    (counter > 0)
    { cout
    <<
    "Delete "
    <<
    s
    <<
    ' '
    <<
    a
    [
    s
    ]
    .at(index)
    <<
    endl; a
    [
    s
    ]
    .erase(
    a
    [
    s
    ]
    .begin()
    +
    index);
    } else cout
    <<
    "No temp"
    <<
    endl;
    }
    } void
    DAY_OF_WEEK(
    map
    <
    string
    , vector
    <
    int
    >> &
    a
    )
    { string s; cin
    >>
    s; if
    (
    a
    .find(s)
    ==
    a
    .end())
    { cout
    <<
    "No temp on this day of the week"
    <<
    endl;
    } else
    { for
    (
    auto q : a
    [
    s
    ]
    ) cout
    <<
    q
    <<
    ' '
    ;
    }

    } void
    WEEK(
    map
    <
    string
    , vector
    <
    int
    >> &
    a
    )
    { a
    .key_comp(); if
    (
    a
    .size() == 0) cout
    <<
    "No temp of the week"
    <<
    endl; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { cout
    <<
    (
    *
    it).first
    <<
    ": "
    ; for
    (
    int i = 0; i < a
    [
    (
    *
    it).first
    ]
    .size(); i++) cout
    <<
    (
    *
    it).second.at(i)
    <<
    ' '
    ; cout
    <<
    endl;
    }
    } void
    MEAN(
    map
    <
    string
    , vector
    <
    int
    >> &
    a
    )
    { a
    .key_comp(); double fullsum = 0; int fullsumC = 0; double sum = 0; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { for
    (
    int i = 0; i < a
    [
    (
    *
    it).first
    ]
    .size(); i++) fullsum += (
    *
    it).second.at(i); fullsumC += (
    *
    it).second.size();
    } fullsum /= fullsumC; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { for
    (
    int i = 0; i < a
    [
    (
    *
    it).first
    ]
    .size(); i++) sum += (
    *
    it).second.at(i); sum /= (
    *
    it).second.size(); if
    (fullsum < sum) cout
    <<
    (
    *
    it).first
    <<
    ' '
    ; sum = 0;
    }
    } void
    DEL_DAY(
    map
    <
    string
    , vector
    <
    int
    >> &
    a
    )
    { string s; cin
    >>
    s; if
    (
    a
    .find(s)
    !=
    a
    .end())
    { a
    .erase(s); cout
    <<
    "Delete "
    <<
    s
    <<
    endl;
    } else cout
    <<
    "No day of week"
    <<
    endl;
    } int main()
    { int
    N; string command; map
    <
    string
    , vector
    <
    int
    >> temp; cin
    >>
    N; for
    (
    int i = 0; i < N; i++)
    { cin
    >>
    command; if
    (command
    ==
    "NEW_TEMP"
    )
    NEW_TEMP(temp); else if
    (command
    ==
    "DEL_TEMP"
    )
    DEL_TEMP(temp); else if
    (command
    ==
    "DAY_OF_WEEK"
    )
    DAY_OF_WEEK(temp); else if
    (command
    ==
    "WEEK"
    )
    WEEK(temp);
    else if
    (command
    ==
    "MEAN"
    )
    MEAN(temp); else if
    (command
    ==
    "DEL_DAY"
    )
    DEL_DAY(temp); else cout
    <<
    "error "
    <<
    endl;
    } return
    0;
    }

    Упражнение 4.
    #include

    #include

    #include

    #include

    #include

    using namespace std; void
    NEW_TEMP(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { string s; cin
    >>
    s; int
    K, L; cin
    >>
    K; for
    (
    int i = 0; i < K; i++)
    { cin
    >>
    L; a
    [
    s
    ]
    .insert(L);
    }
    } void
    DEL_TEMP(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { string s; cin
    >>
    s; int
    K; cin
    >>
    K; int c = 0; int i = 0; if
    (
    a
    .find(s)
    ==
    a
    .end())
    { cout
    <<
    "no"
    <<
    endl;
    } else
    { for
    (
    auto it = a
    [
    s
    ]
    .begin(); it
    !=
    a
    [
    s
    ]
    .end(); it
    ++
    )
    { if
    (
    *
    it == K) { c++; i =
    *
    it;
    }
    } if
    (c > 0)
    { cout
    <<
    "Delete "
    <<
    s
    <<
    ' '
    <<
    i
    <<
    endl; a
    [
    s
    ]
    .erase(
    a
    [
    s
    ]
    .find(i));
    } else cout
    <<
    "No temper"
    <<
    endl;
    }
    } void
    DAY_OF_WEEK(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { string s; cin
    >>
    s; if
    (
    a
    .find(s)
    ==
    a
    .end())
    { cout
    <<
    "No temp on this day of the week"
    <<
    endl;
    } else
    { for
    (
    auto q : a
    [
    s
    ]
    ) cout
    <<
    q
    <<
    ' '
    ;
    }
    }
    void
    WEEK(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { a
    .key_comp(); if
    (
    a
    .size() == 0) cout
    <<
    "No temp of the week"
    <<
    endl; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { cout
    <<
    (
    *
    it).first
    <<
    ": "
    ; for
    (
    auto i = a
    [
    (
    *
    it).first
    ]
    .begin(); i
    !=
    a
    [
    (
    *
    it).first
    ]
    .end(); i
    ++
    ) cout
    <<
    *
    i
    <<
    ' '
    ; cout
    <<
    endl;
    }
    } void
    MEAN(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { a
    .key_comp(); double fullsum = 0; int fullsumC = 0; double sum = 0; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { for
    (
    auto i = a
    [
    (
    *
    it).first
    ]
    .begin(); i
    !=
    a
    [
    (
    *
    it).first
    ]
    .end(); i
    ++
    ) fullsum +=
    *
    i; fullsumC += (
    *
    it).second.size();
    } fullsum /= fullsumC; for
    (
    auto it = a
    .begin(); it
    !=
    a
    .end();
    ++
    it)
    { for
    (
    auto i = a
    [
    (
    *
    it).first
    ]
    .begin(); i
    !=
    a
    [
    (
    *
    it).first
    ]
    .end(); i
    ++
    ) sum +=
    *
    i; sum /= (
    *
    it).second.size(); if
    (fullsum < sum) cout
    <<
    (
    *
    it).first
    <<
    ' '
    ; sum = 0;
    }
    } void
    DEL_DAY(
    map
    <
    string
    , set
    <
    int
    >>& a
    )
    { string s; cin
    >>
    s; if
    (
    a
    .find(s)
    !=
    a
    .end())
    { a
    .erase(s); cout
    <<
    "Delete "
    <<
    s
    <<
    endl;
    } else cout
    <<
    "No day of week"
    <<
    endl;
    } int main()
    { int
    N; string command; map
    <
    string
    , set
    <
    int
    >> temp; cin
    >>
    N; for
    (
    int i = 0; i < N; i++)
    { cin
    >>
    command; if
    (command
    ==
    "NEW_TEMP"
    )
    NEW_TEMP(temp); else if
    (command
    ==
    "DEL_TEMP"
    )
    DEL_TEMP(temp); else if
    (command
    ==
    "DAY_OF_WEEK"
    )
    DAY_OF_WEEK(temp); else if
    (command
    ==
    "WEEK"
    )
    WEEK(temp); else if
    (command
    ==
    "MEAN"
    )

    MEAN(temp); else if
    (command
    ==
    "DEL_DAY"
    )
    DEL_DAY(temp); else cout
    <<
    "ERROR! "
    <<
    endl;
    } return
    0;
    }

    Скриншоты работы программ
    Упражнение 1, приведены данные из примера
    Упражнение 2, данные из примера к упражнению 1
    Упражнение 3, данные из примера
    Упражнение 4, данные из примера к упражнению 3

    Выводы по проделанной работе
    Были проведено знакомство с контейнерами: vector, map, set.


    написать администратору сайта