Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создать стек и очередь, вычислив среднее арифметическое значение всех элементов - 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. Создать приложение для решения задачи, выполнив обработку... подробнее

Показать сообщение отдельно
DiffEreD
1441 / 778 / 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
}

0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru