Upload to git
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
#pragma once
|
||||
|
||||
#include <deque>
|
||||
|
||||
template<class T, class Comp>
|
||||
std::deque<T> Merge(const std::deque<T>& half1, const std::deque<T>& half2, const Comp& comparator) {
|
||||
std::deque<T> result;
|
||||
auto it1 = half1.begin();
|
||||
auto it2 = half2.begin();
|
||||
|
||||
while (it1 != half1.end() && it2 != half2.end()) {
|
||||
if (!comparator(*it2, *it1)) {
|
||||
result.push_back(*it1);
|
||||
++it1;
|
||||
} else {
|
||||
result.push_back(*it2);
|
||||
++it2;
|
||||
}
|
||||
}
|
||||
|
||||
while (it1 != half1.end()) {
|
||||
result.push_back(*it1);
|
||||
++it1;
|
||||
}
|
||||
|
||||
while (it2 != half2.end()) {
|
||||
result.push_back(*it2);
|
||||
++it2;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
template<class T, class Comp>
|
||||
std::deque<T> MergeSort(const std::deque<T>& src, const Comp& comparator) {
|
||||
if (src.size() <= 1) {
|
||||
return src;
|
||||
}
|
||||
|
||||
const size_t mid = src.size() / 2;
|
||||
const auto mid_it = std::next(src.begin(), mid);
|
||||
|
||||
const auto left = MergeSort(
|
||||
std::deque<T>(src.begin(), mid_it),
|
||||
comparator
|
||||
);
|
||||
const auto right = MergeSort(
|
||||
std::deque<T>(mid_it, src.end()),
|
||||
comparator
|
||||
);
|
||||
|
||||
return Merge(left, right, comparator);
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
#include "mainwindow.h"
|
||||
|
||||
#include <QApplication>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication a(argc, argv);
|
||||
MainWindow w;
|
||||
w.show();
|
||||
return a.exec();
|
||||
}
|
||||
+345
@@ -0,0 +1,345 @@
|
||||
#include "mainwindow.h"
|
||||
#include "ui_mainwindow.h"
|
||||
|
||||
#include "algo.h"
|
||||
|
||||
#include <QMessageBox>
|
||||
#include <QSignalBlocker>
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
bool CaseInsensitiveLess(const std::string& lhs, const std::string& rhs) {
|
||||
return QString::compare(
|
||||
QString::fromStdString(lhs),
|
||||
QString::fromStdString(rhs),
|
||||
Qt::CaseInsensitive
|
||||
) < 0;
|
||||
}
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindow)
|
||||
, m_random_gen_(std::random_device{}()) {
|
||||
ui->setupUi(this);
|
||||
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::ApplyModel() {
|
||||
const auto it_tmp = deque_model_.iterator;
|
||||
const QSignalBlocker blocker(ui->list_widget);
|
||||
|
||||
ui->list_widget->clear();
|
||||
|
||||
for (size_t i = 0; i < deque_model_.items.size(); ++i) {
|
||||
ui->list_widget->addItem(
|
||||
QString::fromStdString(std::to_string(i) + ": " + deque_model_.items[i])
|
||||
);
|
||||
}
|
||||
|
||||
ui->list_widget->addItem("end");
|
||||
|
||||
deque_model_.iterator = it_tmp;
|
||||
|
||||
ui->txt_size->setText(QString::number(deque_model_.items.size()));
|
||||
|
||||
const bool is_empty = deque_model_.items.empty();
|
||||
ui->btn_pop_back->setDisabled(is_empty);
|
||||
ui->btn_pop_front->setDisabled(is_empty);
|
||||
ui->btn_erase->setDisabled(is_empty);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::ApplyIterator() {
|
||||
const QSignalBlocker blocker(ui->list_widget);
|
||||
|
||||
if (deque_model_.items.empty()) {
|
||||
ui->list_widget->setCurrentRow(0);
|
||||
ui->txt_elem_content->clear();
|
||||
ui->btn_edit->setDisabled(true);
|
||||
ui->btn_erase->setDisabled(true);
|
||||
ui->btn_inc_iterator->setDisabled(true);
|
||||
ui->btn_dec_iterator->setDisabled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
const auto distance = std::distance(deque_model_.items.begin(), deque_model_.iterator);
|
||||
const bool is_end = deque_model_.iterator == deque_model_.items.end();
|
||||
const bool is_begin = deque_model_.iterator == deque_model_.items.begin();
|
||||
|
||||
ui->list_widget->setCurrentRow(static_cast<int>(distance));
|
||||
ui->btn_edit->setDisabled(is_end);
|
||||
ui->btn_erase->setDisabled(is_end);
|
||||
ui->btn_inc_iterator->setDisabled(is_end);
|
||||
ui->btn_dec_iterator->setDisabled(is_begin);
|
||||
|
||||
if (is_end) {
|
||||
ui->txt_elem_content->clear();
|
||||
} else {
|
||||
ui->txt_elem_content->setText(QString::fromStdString(*deque_model_.iterator));
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::SetRandomGen(const std::mt19937& random_gen) {
|
||||
m_random_gen_ = random_gen;
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_clear_clicked() {
|
||||
deque_model_.items.clear();
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_push_front_clicked() {
|
||||
deque_model_.items.push_front(ui->txt_elem_content->text().toStdString());
|
||||
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_push_back_clicked() {
|
||||
deque_model_.items.push_back(ui->txt_elem_content->text().toStdString());
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_pop_back_clicked() {
|
||||
if (deque_model_.items.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.items.pop_back();
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_pop_front_clicked() {
|
||||
if (deque_model_.items.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.items.pop_front();
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_insert_clicked() {
|
||||
deque_model_.items.insert(
|
||||
deque_model_.iterator,
|
||||
ui->txt_elem_content->text().toStdString()
|
||||
);
|
||||
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_erase_clicked() {
|
||||
if (deque_model_.iterator == deque_model_.items.end()) {
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.items.erase(deque_model_.iterator);
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_begin_clicked() {
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_end_clicked() {
|
||||
deque_model_.iterator = deque_model_.items.end();
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_dec_iterator_clicked() {
|
||||
if (deque_model_.iterator != deque_model_.items.begin()) {
|
||||
--deque_model_.iterator;
|
||||
}
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_inc_iterator_clicked() {
|
||||
if (deque_model_.iterator != deque_model_.items.end()) {
|
||||
++deque_model_.iterator;
|
||||
}
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_list_widget_currentRowChanged(int currentRow) {
|
||||
currentRow = std::clamp(currentRow, 0, static_cast<int>(deque_model_.items.size()));
|
||||
deque_model_.iterator = deque_model_.items.begin() + currentRow;
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_tea_clicked() {
|
||||
static std::deque<std::string> tea {
|
||||
"Чай Лунцзин",
|
||||
"Эрл Грей",
|
||||
"Сенча",
|
||||
"Пуэр",
|
||||
"Дарджилинг",
|
||||
"Ассам",
|
||||
"Матча",
|
||||
"Ганпаудер",
|
||||
"Оолонг",
|
||||
"Лапсанг Сушонг"
|
||||
};
|
||||
|
||||
deque_model_.items = tea;
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_cakes_clicked() {
|
||||
static std::deque<std::string> cakes {
|
||||
"Красный бархат",
|
||||
"Наполеон",
|
||||
"Медовик",
|
||||
"Тирамису",
|
||||
"Прага",
|
||||
"Чизкейк",
|
||||
"Захер",
|
||||
"Эстерхази",
|
||||
"Морковный торт",
|
||||
"Чёрный лес",
|
||||
};
|
||||
deque_model_.items = cakes;
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_edit_clicked() {
|
||||
if (deque_model_.iterator == deque_model_.items.end()) {
|
||||
return;
|
||||
}
|
||||
|
||||
*deque_model_.iterator = ui->txt_elem_content->text().toStdString();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_resize_clicked() {
|
||||
bool ok = false;
|
||||
const int size = ui->txt_size->text().toInt(&ok);
|
||||
|
||||
if (!ok || size < 0 || size > 1000) {
|
||||
QMessageBox::warning(this, "Error", "Incorrect size");
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.items.resize(static_cast<size_t>(size));
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_find_clicked() {
|
||||
deque_model_.iterator = std::find(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end(),
|
||||
ui->txt_elem_content->text().toStdString()
|
||||
);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_count_clicked() {
|
||||
const int count = static_cast<int>(std::count(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end(),
|
||||
ui->le_count->text().toStdString()
|
||||
));
|
||||
|
||||
ui->lbl_count->setText(QString::number(count));
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_min_element_clicked() {
|
||||
deque_model_.iterator = std::min_element(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end()
|
||||
);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_max_element_clicked() {
|
||||
deque_model_.iterator = std::max_element(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end()
|
||||
);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_sort_clicked() {
|
||||
deque_model_.items = MergeSort(
|
||||
deque_model_.items,
|
||||
[](const std::string& lhs, const std::string& rhs) {
|
||||
return lhs < rhs;
|
||||
}
|
||||
);
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_sOrT_clicked() {
|
||||
deque_model_.items = MergeSort(deque_model_.items, CaseInsensitiveLess);
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_shuffle_clicked() {
|
||||
std::shuffle(deque_model_.items.begin(), deque_model_.items.end(), m_random_gen_);
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_unique_clicked() {
|
||||
if (!std::is_sorted(deque_model_.items.begin(), deque_model_.items.end())) {
|
||||
ApplyIterator();
|
||||
return;
|
||||
}
|
||||
|
||||
const auto new_end = std::unique(deque_model_.items.begin(), deque_model_.items.end());
|
||||
deque_model_.items.erase(new_end, deque_model_.items.end());
|
||||
deque_model_.iterator = deque_model_.items.begin();
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_reverse_clicked() {
|
||||
std::reverse(deque_model_.items.begin(), deque_model_.items.end());
|
||||
ApplyModel();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_lower_bound_clicked() { if (!std::is_sorted(deque_model_.items.begin(), deque_model_.items.end())) {
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.iterator = std::lower_bound(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end(),
|
||||
ui->txt_elem_content->text().toStdString()
|
||||
);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
|
||||
void MainWindow::on_btn_upper_bound_clicked() {
|
||||
if (!std::is_sorted(deque_model_.items.begin(), deque_model_.items.end())) {
|
||||
return;
|
||||
}
|
||||
|
||||
deque_model_.iterator = std::upper_bound(
|
||||
deque_model_.items.begin(),
|
||||
deque_model_.items.end(),
|
||||
ui->txt_elem_content->text().toStdString()
|
||||
);
|
||||
|
||||
ApplyIterator();
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
#pragma once
|
||||
|
||||
#include <QMainWindow>
|
||||
|
||||
#include <random>
|
||||
|
||||
#include "model.h"
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
namespace Ui { class MainWindow; }
|
||||
QT_END_NAMESPACE
|
||||
|
||||
class MainWindow : public QMainWindow {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
void SetRandomGen(const std::mt19937& random_gen);
|
||||
|
||||
private slots:
|
||||
// Очистить список
|
||||
void on_btn_clear_clicked();
|
||||
// Добавить элеменит в начало списка
|
||||
void on_btn_push_front_clicked();
|
||||
// Добавить элемент в конец списка
|
||||
void on_btn_push_back_clicked();
|
||||
// Удалить элемент из начала списка
|
||||
void on_btn_pop_front_clicked();
|
||||
// Удалить элемент из конца списка
|
||||
void on_btn_pop_back_clicked();
|
||||
// Вставить элемент в список на определенную позицию
|
||||
void on_btn_insert_clicked();
|
||||
// Удалить выбранный элемент
|
||||
void on_btn_erase_clicked();
|
||||
// Перейти в начало списка
|
||||
void on_btn_begin_clicked();
|
||||
// Перейти в конец списка
|
||||
void on_btn_end_clicked();
|
||||
// Перейти на пердыдущий элемент
|
||||
void on_btn_dec_iterator_clicked();
|
||||
// Перейти на следующий элемент списка
|
||||
void on_btn_inc_iterator_clicked();
|
||||
// Событие обновляет список после изменения
|
||||
void on_list_widget_currentRowChanged(int currentRow);
|
||||
// Заполнение списка стандарными элементами (чай, торт)
|
||||
void on_btn_tea_clicked();
|
||||
void on_btn_cakes_clicked();
|
||||
|
||||
// Изменить элемент списка
|
||||
void on_btn_edit_clicked();
|
||||
// Изменить количество элементов в списке
|
||||
void on_btn_resize_clicked();
|
||||
// Найти элемент в списке
|
||||
void on_btn_find_clicked();
|
||||
// Отобразить количество элементов в спике
|
||||
void on_btn_count_clicked();
|
||||
// Перейти к минимальному элементу
|
||||
void on_btn_min_element_clicked();
|
||||
// Перейти к максимаьному элементу
|
||||
void on_btn_max_element_clicked();
|
||||
// Сортировать список
|
||||
void on_btn_sort_clicked();
|
||||
// Сортировать список
|
||||
void on_btn_sOrT_clicked();
|
||||
// Применить рандомный
|
||||
void on_btn_shuffle_clicked();
|
||||
// Удалить повторящиеся элементы
|
||||
void on_btn_unique_clicked();
|
||||
// Перевернуть массив
|
||||
void on_btn_reverse_clicked();
|
||||
// Поиск элементов меньше и больше заданного значения
|
||||
void on_btn_lower_bound_clicked();
|
||||
void on_btn_upper_bound_clicked();
|
||||
|
||||
private:
|
||||
// Выводит на экран элементы списка с 0, устанавливает размер списка
|
||||
void ApplyModel();
|
||||
// Выводит текущее полжение итератора, информацию об элементе
|
||||
void ApplyIterator();
|
||||
|
||||
private:
|
||||
Model deque_model_;
|
||||
Ui::MainWindow *ui;
|
||||
std::mt19937 m_random_gen_;
|
||||
};
|
||||
+478
@@ -0,0 +1,478 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>600</width>
|
||||
<height>648</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>std::deque demo</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>581</width>
|
||||
<height>631</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QListWidget" name="list_widget"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="txt_elem_content">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_edit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Edit</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_find">
|
||||
<property name="text">
|
||||
<string>find</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="le_count"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_count">
|
||||
<property name="text">
|
||||
<string>count</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="lbl_count">
|
||||
<property name="text">
|
||||
<string>0</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="btn_pop_back">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>pop_back</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="btn_push_back">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>push_back</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QPushButton" name="btn_erase">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>erase</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QPushButton" name="btn_insert">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LayoutDirection::LeftToRight</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>insert</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QPushButton" name="btn_dec_iterator">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>--</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="1">
|
||||
<widget class="QPushButton" name="btn_inc_iterator">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>++</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QPushButton" name="btn_begin">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>begin</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="1">
|
||||
<widget class="QPushButton" name="btn_end">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>end</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="0">
|
||||
<widget class="QPushButton" name="btn_tea">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>= чай</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="1">
|
||||
<widget class="QPushButton" name="btn_cakes">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>= торты</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Методы</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Итератор</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Заготовки</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QPushButton" name="btn_clear">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>clear</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Алгоритмы</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QPushButton" name="btn_min_element">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>min_element</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<widget class="QPushButton" name="btn_max_element">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>max_element</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QPushButton" name="btn_sort">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>merge sort</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<widget class="QPushButton" name="btn_sOrT">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>merge sOrT</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QPushButton" name="btn_shuffle">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>shuffle</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<widget class="QPushButton" name="btn_unique">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>unique</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="QPushButton" name="btn_reverse">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>reverse</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QPushButton" name="btn_pop_front">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>pop_front</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="btn_push_front">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>push_front</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QPushButton" name="btn_lower_bound">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>lower_bound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<widget class="QPushButton" name="btn_upper_bound">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>upper_bound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>size():</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="txt_size">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btn_resize">
|
||||
<property name="text">
|
||||
<string>resize</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <random>
|
||||
#include <deque>
|
||||
|
||||
struct Model {
|
||||
using Deque = std::deque<std::string>;
|
||||
Deque items;
|
||||
Deque::iterator iterator = items.begin();
|
||||
};
|
||||
@@ -0,0 +1,24 @@
|
||||
########
|
||||
MOCK_LIB=../../../../mocks_library
|
||||
########
|
||||
|
||||
QT += core gui widgets
|
||||
|
||||
CONFIG += c++20
|
||||
|
||||
SOURCES += \
|
||||
main.cpp \
|
||||
mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
algo.h \
|
||||
mainwindow.h \
|
||||
model.h
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
Reference in New Issue
Block a user