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

STL Iterators - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевод из кодировки UTF - 8 в ANSI http://www.cyberforum.ru/cpp-beginners/thread634420.html
Всем привет! Пишу прогу на линухе, результаты работы вывожу в html файл. Так вот когда открываю файл для прочтения с помощью браузера там иероглифы, с помощью текстового редактора в linux то все ок....
C++ Книги для использования оконных приложений Всем привет. Консольные приложение это хорошо, но я уже прочитал книгу, и более менее знаю азы c++. Но хотелось бы создавать уже нормальные, красивые приложения с использованием Windows Forms... http://www.cyberforum.ru/cpp-beginners/thread634416.html
C++ Разыменования указателя
Добрий день подскажите пожалуйса можно ли разыменовать такое вот виражения pt->str char*pt-указатель str объект класса _bstr_t нужно получить данные которые находятся в str если сделать вот так...
C++ Засада с машинным эпсилон, или Либо я дурак
Эту задачку выполняют все начинающие. Так вот, берём два простеньких кода. Они настолько коротки, тупы и очевидны, что я даже не комментировал их. Первый, работает нормально. #include...
C++ Тема: Записи. Работа с текстовыми файлами http://www.cyberforum.ru/cpp-beginners/thread634393.html
Тема: Записи. Работа с текстовыми файлами. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже...
C++ Отобразить вектор в обратном порядке не используя реверсивные итераторы Отобразить вектор в обратном порядке не используя реверсивные итераторы никак не могу в цикле вывести последний(самый первый) элемент подробнее

Показать сообщение отдельно
lemegeton
2928 / 1357 / 136
Регистрация: 29.11.2010
Сообщений: 2,725
10.08.2012, 19:08
Для красоты и универсальности можно подправить несколько деталей.
Не нужный скопированный код перегруженной ф-ции sum.
Для универсальности, адаптер все-таки нужен. Для простоты можно ввести в виде предиката.

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
#include <iostream>
#include <string>
#include <stdexcept>
#include <utility>
#include <vector>
#include <map>
 
// предикат, общий для простых типов и для std::pair<K, V>
struct PredicateCommon {
  // обычно возвращает собственно значение
  template <class T>
  T operator()(const T &value) { return value; }
  // в случае класса std::pair возвращает поле second
  template <class K, class V>
  V operator()(const std::pair<K, V> &value) { return value.second; }
};
 
// бинарная операция суммирования, велосипед для std::sum
// можно заменить плюсом
struct BinaryOperationSum {
  template <class T>
  T operator()(const T &a, const T &b) { return a + b; }
};
 
// общая функция, похожая на std::accumulate
// принимает бинарную функцию и предикат для элементов контейнера
template <class InputIterator, class T,
  class BinaryOperation, class Predicate>
T accumulate(InputIterator first, InputIterator last, T initialValue,
  BinaryOperation binaryOperation, Predicate predicate) {
  while (first != last)
    // выполняет бинарную операцию надо всеми элементами с применением
    // предиката
    initialValue = binaryOperation(initialValue, predicate(*first++));
  return initialValue;
}
 
// частный случай accumulate -- суммирование с заранее заданным предикатом
template <class InputIterator, class T>
T sum(InputIterator first, InputIterator last, T initialValue) {
  return accumulate(first, last, initialValue, BinaryOperationSum(),
    PredicateCommon());
}
 
// частный случай sum -- суммирование всех элементов контейнера с заранее заданным предикатом
template <class Container, class T>
T sum(const Container &container, T initialValue) {
  return sum(container.begin(), container.end(), initialValue);
}
 
int main(int argc, char **argv) {
  std::map<int, double> d;
  d[0] = 0.72;
  d[1] = 0.12;
  d[2] = 1.22;
  std::cout << sum(d, 0.0d) << std::endl;
  std::cout << intToString(100, 16) << std::endl;
  return 0;
};
4
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru