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

Помогите разобраться с итераторами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ сортировка подсчетом http://www.cyberforum.ru/cpp-beginners/thread427075.html
Даны две последовательности. Получить упорядоченную по невозрастанию последовательность, состоящую из тех членов первой последовательности, которых нет во второй. Сортировка методом подсчета.
C++ Программирование LPT порта Привет! Так получилось, что приходится осваивать программирование. Начитался статей, написал программу, которая работает с LPT портом, с помощью Delphi. Теперь требуют перевести ее в C++Builder.... http://www.cyberforum.ru/cpp-beginners/thread427069.html
Переделать программу со вводом с клавиатуры на ввод из файла C++
нужно сделать в программе чтоб ввод был из файла, а не с клавиатуры #include <iostream> #include <locale.h> #include <math.h> #include <fstream> using namespace std; struct marsh { char...
Как инициализировать член раньше предка C++
Изредка, но может встретиться в жизни такая ситуация, когда надо инициализировать один из членов класса раньше предка. Обычно в том случае, если при инициализации предок ссылается на данные этого...
C++ Вычислить и вывести на экран в виде таблицы значения функции http://www.cyberforum.ru/cpp-beginners/thread427003.html
Не пойму гдето ошибка, не хочет считать по второй формуле помогите пожалуйста... условия: Вычислить и вывести на экран в виде таблицы значения функции F в интервале Xнач до Xкон c шагом dX. ...
C++ в каком направлении действовать при написании программы дано задание: "Проверить, является ли выражение, состоящее только из прописных букв заданной строки, палиндромом. Если да, то напечатать полученный палиндром. В противном случае вывести строку,... подробнее

Показать сообщение отдельно
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
13.01.2012, 00:17
как-то криво у вас это сделано. файнд ничего не возвращает. хотя мог бы возвращать итератор. и дальше уже в зависимости от ситуации, можно было бы результат печатать или еще что-то делать. вариант принта в файнде как сейчас - это хардкод и ничего хорошего из этого не будет. Это первое.

Второе. Как сделать так, чтобы поиск был легко настраиваемый? Так же как и в стл работает алгоритм std::find_if, который принимает диапазон поиска и предикат. т.е. файнд можно было бы переписать вот так:

C++
1
2
3
4
5
6
7
8
9
10
template <typename Pred>
const_iterator Find(const_iterator begin, const_iterator end, Pred predicate) const
{
   return std::find_if(begin, end, predicate);
}
 
const_iterator Find(Pred predicate) const // удобно, когда нужен поиск по всему диапазону
{
   return Find(begin(), end(), predicate);
}
Использование:
C++
1
2
3
4
5
ComputerModel<XXX> cm;
if (cm.Find(cm.begin(), cm.end(), SomePred) != cm.end())
{
  // do something
}
И третье. Не совсем понятно в чем польза от класса ComputerModel. Почему нельзя было просто использовать контейнеры и алгоритмы?

Добавлено через 38 минут
Четвертое
C++
1
2
3
4
5
for ( begin; begin!=end; begin++)
{
    if(/*а вот здесь как? не могу же я написать вот так потому что это итератор*/ *begin.ram == value)
        *begin.Print();
}
Очень даже можете. Итератор можете рассматривать как указатель. Через итератор можно получить доступ до объекта и до его публичных полей\методов.
C++
1
2
3
4
if (begin->ram == value)
{
   ...
}
Итератор можете рассматривать как указатель. Через итератор можно получить доступ до публичных полей\методов объекта, на который этот итератор ссылается.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru