Форум программистов, компьютерный форум CyberForum.ru

Создать стек и очередь, вычислив среднее арифметическое значение всех элементов - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Поменять в списке местами первый минимальный и последний максимальный элементы http://www.cyberforum.ru/cpp-beginners/thread1225342.html
односвязный список stl (c++) На основе данных входного файла создать список. Поменять в списке местами первый минимальный и последний максимальный элементы.
C++ Превышает ли максимальное из чисел последовательности минимальное не более чем на 25? Даны натуральные число n и целые числа a1, a2,...,an. Верно ли, что максимальное из чисел ai превышает минимальное не более чем на 25.(C++) http://www.cyberforum.ru/cpp-beginners/thread1225335.html
C++ Определить количество четных делителей числа
Дано натуральное число. Определить количество его делителей. Сколько из них четных? С++(помогите с программой)
C++ Дано натуральное число. Определить есть ли в нем цифра 3? C++
Дано натуральное число. Определить есть ли в нем цифра 3?
C++ Определить порядковый номер цифры с максимальной величиной http://www.cyberforum.ru/cpp-beginners/thread1225319.html
Дано натуральное число, в котором все цифры различны. Определить порядковый номер его максимальной цифры, считая номера: -от конца числа; -от начала числа;
C++ Обработка исключений при табулировании функций Задание: 1. Проанализировать задачу одного из вариантов и выявить те типы ошибок, которые могут возникнуть при реализации на ЭВМ. 2. Создать приложение для решения задачи, выполнив обработку исключений. Для обработки ошибок деления на ноль, неправильного приведения типов использовать встроенные исключения. 3. Для обработки остальных ошибок создать и возбудить собственные классы исключений.... подробнее

Показать сообщение отдельно
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.07.2014, 16:42     Создать стек и очередь, вычислив среднее арифметическое значение всех элементов
Что такое можно написать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
template <typename T>
void print_stack(std::stack<T> st, std::ostream& os = std::cout)
{
   while (!st.empty()) {
      os << st.top() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename T>
void print_queue(std::queue<T> st, std::ostream& os = std::cout)
{
   while (!st.empty()) {
      os << st.front() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename T>
T average_for_queue(std::queue<T> st)
{
   if (st.empty()) return T();
 
   T average = T();
   size_t count = st.size();
   while (!st.empty()) {
      average += st.front();
      st.pop();
   }
   return average/count;
}
 
template <typename T>
T average_for_stack(std::stack<T> st)
{
   if (st.empty()) return T();
 
   T average = T();
   size_t count = st.size();
   while (!st.empty()) {
      average += st.top();
      st.pop();
   }
   return average/count;
}
 
int main()
{
   std::ifstream ifs("file.txt");
   if (ifs.is_open()) {
      using input = std::istream_iterator<int>;
      using stk_cont_t = std::stack<int>::container_type;
      using que_cont_t = std::queue<int>::container_type;
 
      std::vector<int> buffer{input(ifs), input()};
      std::queue<int> qu{que_cont_t{buffer.begin(), buffer.end()}};
      std::stack<int> st{stk_cont_t{buffer.begin(), buffer.end()}};
 
      print_queue(qu);
      print_stack(st);
 
      assert(average_for_queue(qu) == average_for_stack(st));
 
      std::cout << "averege: " << average_for_queue(qu) << "\n";
   }
 
}
Добавлено через 1 минуту
С удалением элементов думаю сами справитесь.

Добавлено через 11 минут

Не по теме:

Вопрос к знатокам: как бы вы написали обобщенную функцию для печати stack, queue, priority_queue? Ну, что то вроде этого:

C++
1
2
3
4
5
6
7
8
template <typename ContainerAdaptors>
void print(ContainerAdaptors conteiner, std::ostream& os = std::cout) {
   //static_assert(??);
   //...
   //if (stack_type) print_stack_impl();
   //if (queue_type) print_queue_impl();
   //...
}



Добавлено через 1 час 51 минуту

Не по теме:

Вроде бы реализовал. Вот такое вышло

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
namespace traits
{
//stack traits
template <class T>
struct is_stdstack: std::false_type {};
 
template <class T, class Container>
struct is_stdstack<std::stack<T, Container> >: std::true_type {};
 
//queue traits
template <class T>
struct is_stdqueue: std::false_type {};
 
template <class T, class Container>
struct is_stdqueue<std::queue<T, Container> >: std::true_type {};
 
//priority_queue traits
template <class T>
struct is_stdpriority_queue: std::false_type {};
 
template <class T, class Container, class Compare>
struct is_stdpriority_queue<std::priority_queue<T, Container, Compare> >: std::true_type {};
 
}//end namespace traits
 
namespace detail
{
template <typename Adaptor>
void print_impl(Adaptor& st, std::ostream& os,
                typename std::enable_if<traits::is_stdstack<Adaptor>::value ||
                traits::is_stdpriority_queue<Adaptor>::value>::type* = 0)
{
   std::cout << "stack or priority_queue\n";
   while (!st.empty()) {
      os << st.top() << " ";
      st.pop();
   }
   os << std::endl;
}
 
template <typename Adaptor>
void print_impl(Adaptor& st, std::ostream& os,
                typename std::enable_if<traits::is_stdqueue<Adaptor>::value>::type* = 0)
{
   std::cout << "queue\n";
   while (!st.empty()) {
      os << st.front() << " ";
      st.pop();
   }
   os << std::endl;
}
}//end namespace detail
 
template <typename Adaptor>
void print(Adaptor ctner, std::ostream& os = std::cout) {
   using namespace traits;
   static_assert(is_stdqueue<Adaptor>::value ||
                 is_stdstack<Adaptor>::value ||
                 is_stdpriority_queue<Adaptor>::value,
                 "not valid Container's Adaptor, must be stack, queue or priority_queue");
   detail::print_impl<Adaptor>(ctner, os);
}
 
int main()
{
   std::stack<int>          st{ {1,2,3,4} };
   std::queue<double>       qu{ {1.1, 2.2, 3.3, 4.4} };
   std::vector<int>         v{1,2,3,4,5};
   std::priority_queue<int> pqu{v.begin(), v.end()};
   print(st);
   print(qu);
   print(pqu);
   //print(v); //compile-time error
}

 
Текущее время: 15:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru