Объясните программу
#include <stdafx.h>
#include <iostream>
#include <list>
#include <algorithm>
#include <clocale>
#include <locale>
using namespace std;
struct Print{
template <typename T>
void operator() (T &elem)
{
cout << elem << ' ';
}
};
template <typename T>
void addToFront(list<T> &_coll, const T value)
{
_coll.push_front(value);
}
template <typename T>
void dellist(list<T> &_coll)
{
_coll.pop_front();
}
template <typename T>
void showlist(list<T> &_coll)
{
if(!_coll.empty())
{
for_each(_coll.begin(), _coll.end(), Print());
}
else
wcout << L"The list is cleared\n";
}
template <typename T>
void dubllist(list<T> &_coll, const T value)
{
list<T>::iterator pos;
for(pos = _coll.begin(); pos != _coll.end(); ++pos)
{
if(*pos == value){
if(pos == _coll.begin())
_coll.push_front(value);
else if(pos != (--_coll.end())){
_coll.insert(pos, value);
}
else if(pos == (--_coll.end())){
_coll.push_back(value);
++pos;
}
}
}
}
template <typename T>
void menu(list<T> &);
void instructions();
int main(int argc, char *argv[])
{
std::locale::global(std::locale("Russian"));
printf("Написать программу для работы с двунаправленным нециклическим списком: \n добавление/удаление элементов в голову, просмотр списка,\n реализовать дублирование списка с заданным значением \n");
wcout.imbue(locale(".866"));
list<int> coll;
menu(coll);
if(coll.empty())
coll.clear();
cout << "\n\n";
return 0;
}
void instructions()
{
wcout << L"Select menu item: " <<
L"\n1 - To add an element in the beginning" <<
L"\n2 - To remove an element from the beginning" <<
L"\n3 - duplication" <<
L"\n4 - Exit.\n";
}
template <typename T>
void menu(list<T> &coll)
{
int punkt_menu, value;
instructions();
do{
wcout << L"\n What do you want to make? \n ";
cin >> punkt_menu;
switch(punkt_menu)
{
case 1:
wcout << L"\n Enter numbers which you want to add in the list: ";
cin >> value;
addToFront(coll, value);
showlist(coll);
break;
case 2:
dellist(coll);
showlist(coll);
break;
case 3:
wcout << L"Write numbers: ";
cin >> value;
dubllist(coll, value);
showlist(coll);
break;
}
}while(punkt_menu != 4);
}
Внезапно, "Начал сдавать Ц++, решение достал, а осознание не пришло", нэ?
При достаточно вдумчивом изучении C++ назначение каждой строки очень скоро станет ясным.
По факту здесь не реализован двунаправленый список, а сделана лишь скромная обёртка поверх std::list
Подумайте прежде чем сдавать
Цитата: grgdvo
Нормальный преподавал не должен принять такое.
По факту здесь не реализован двунаправленый список, а сделана лишь скромная обёртка поверх std::list
Подумайте прежде чем сдавать
По факту здесь не реализован двунаправленый список, а сделана лишь скромная обёртка поверх std::list
Подумайте прежде чем сдавать
А где в задании написано, что нужен свой лисопед?
Цитата: Der Meister
А где в задании написано, что нужен свой лисопед?
это преподовательско-студенческая традиция :)
то сделать лисопед с квадратными колёсами , то гоночный автомобиль без колёс , то трактор с реактивным движком.. )