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

STL Iterators - C++

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

Показать сообщение отдельно
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
09.08.2012, 20:43  [ТС]     STL Iterators
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Естественно, потому что итератор по map по operator* возвращает пары, а не единичные значения. Они органически несовместимы.

Как решать? Да что-то ничего умнее и красивее адаптера в голову не приходит. Он позволит совместить несовместимое:
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
75
76
77
78
#include <iostream>
 
#include <vector>
#include <list>
#include <map>
 
template <typename Iterator>
double
Sum( Iterator first, Iterator last )
{
    double ret = 0.0;
 
    while( first != last )
        ret += *first++;
 
    return ret;
}
 
template <class T1, class T2>
class MapAdapter {
  typename std::map<T1, T2>::iterator iterator;
public:
  MapAdapter(const typename std::map<T1, T2>::iterator &iterator_):
    iterator(iterator_) {}
 
  MapAdapter<T1, T2>& operator++()
  {
    iterator++;
    return this;
  }
 
  MapAdapter<T1, T2> operator++(int bork)
  {
    return MapAdapter<T1, T2>(++iterator);
  }
 
  T2 operator*()
  {
    return (*iterator).second;
  }
 
  bool operator==(const MapAdapter<T1, T2> &other)
  {
    return this->iterator == other.iterator;
  }
 
  bool operator==(const typename std::map<T1, T2>::iterator &other)
  {
    return this->iterator == other;
  }
 
  bool operator!=(const MapAdapter<T1, T2> &other)
  {
    return !MapAdapter<T1, T2>::operator==(other);
  }
 
  bool operator!=(const typename std::map<T1, T2>::iterator &other)
  {
    return !MapAdapter<T1, T2>::operator==(other);
  }
};
 
int
main()
{
    // typedef std::vector< double > double_container_t;
    // typedef std::list< double > double_container_t;
    typedef std::map< double,double > double_container_t;
 
     double_container_t MyContainer;
            for (int i=0;i<10;i++) 
                {
                    MyContainer[i] = i*10; 
                }
 
    std::cout << "sum = " << Sum(MapAdapter<double, double>(MyContainer.begin()), MapAdapter<double, double>(MyContainer.end())) << '\n';
    return 0;
}

Блин спасибо конечно большое!!! это вообще код героя 80 уровня ...
Но блин по заданию там должен быть один аргумент that accepts the template argument T as input and returns a double. НЕ argumentS, а the argument...

Короче походу накосячали с составлением задания что то я смотрю не кто не делает чтоб мап вектор и лист в одном темплейте был...

короче как сделать чтоб вектор и лист был в одном темплейте и принимал аргумент контейнер

тут был хороший вариант спасибо товарищу !

Но как это объединить в один темплейт

спасибо товарищу !
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
template<typename Iterator>
double get_el(Iterator i, const typename Iterator::value_type&)
{
   return *i;
}
 
 
template<typename Container>
double Sum(const Container& cnt)
{
   typedef typename Container::const_iterator c_iter;
   double Sum = 0;
   for (c_iter i = cnt.begin(); i != cnt.end(); ++i)
       {
          Sum += get_el(i, *i);
       }
   return Sum;
}
 
 
int
main()
{
    // typedef std::vector< double > double_container_t;
     typedef std::list< double > double_container_t;
    //typedef std::map< double,double > double_container_t;
 
     double_container_t MyContainer;
 
            for (int i=0;i<10;i++) 
                {
                    MyContainer.push_back(i);
                    //MyContainer[i] = i*10; 
                }
            
    std::cout << "sum = " << Sum(MyContainer ) << '\n';
 
    return 0;
 
}




Или вот допустим то что я нахреначил, как сделать так чтоб это один был тимплейт (лучше конечно этот переделать)
то на что меня хватило пока
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
template <typename T> 
        double Sum (std::list<T>& MyList)
            {
 
                double sum_of_MyList_elements = 0;
 
                std::list<T>::iterator iMyListIterator = MyList.begin();    
                
                
                    while (iMyListIterator != MyList.end()) // A loop that iterates MyList 
                        {
                            sum_of_MyList_elements += *(iMyListIterator++);
                        }
                return sum_of_MyList_elements ; 
            }
 
 
 
        template  <typename T> 
        double Sum (std::vector<T>& MyVector)
            {
                double sum_of_MyVector_elements = 0;
 
                std::vector<T>::iterator iMyVectorIterator = MyVector.begin();  
 
                    while (iMyVectorIterator!=MyVector.end())
                        {
                            sum_of_MyVector_elements += *(iMyVectorIterator++);
                        }
                return sum_of_MyVector_elements;
            }
 
Текущее время: 10:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru