Russian Qt Forum
Ноябрь 22, 2024, 18:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: выбор направления прохода по контейнеру  (Прочитано 13151 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Февраль 07, 2016, 15:57 »

да, это понятно. но данные эти придется тащить через еще один уровень Улыбающийся
Через какой уровень? В лямбде доступны все данные из среды ее описания, т.е. той функции в которой она определена, не зависимо от вложенности.

Вы бы показали больше кода, какие нужны данные и где вызывается вложенная лямбда.
« Последнее редактирование: Февраль 07, 2016, 16:34 от Old » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #16 : Февраль 07, 2016, 18:14 »

захватывать нужно ж необходимые переменные (предпочитаю не писать [=], если там не тонну захватить надо). не вижу смысла лишний раз это делать, если можно написать код без ущерба читабельности и понятливости.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Февраль 07, 2016, 18:17 »

захватывать нужно ж необходимые переменные (предпочитаю не писать [=], если там не тонну захватить надо). не вижу смысла лишний раз это делать, если можно написать код без ущерба читабельности и понятливости.
Если так, то нет вопросов.
Записан
Akon
Гость
« Ответ #18 : Февраль 09, 2016, 12:37 »

kambala: имхо, ваш самый первый вариант самый очевидный/практичный. А чтобы компилятор не ругался на типы итераторов, параметризуйте:
Код:
template<typename Iterator>
void func(Iterator begin, const Iterator end)
{
    for (; end != begin; ++begin)
      // do something with *begin
}

std::vector<int> v;
func(v.begin, v.end);
func(v.rbegin, v.rend);
« Последнее редактирование: Февраль 09, 2016, 12:45 от Akon » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Февраль 09, 2016, 13:00 »

А чтобы компилятор не ругался на типы итераторов, параметризуйте:
Код:
template<typename Iterator>
void func(Iterator begin, const Iterator end)
{
    for (; end != begin; ++begin)
      // do something with *begin
}

std::vector<int> v;
func(v.begin, v.end);
func(v.rbegin, v.rend);
Так теряется контекст вызывающего.
Записан
Akon
Гость
« Ответ #20 : Февраль 09, 2016, 20:45 »

Контекст параметром передать.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #21 : Февраль 09, 2016, 21:03 »

kambala: имхо, ваш самый первый вариант самый очевидный/практичный. А чтобы компилятор не ругался на типы итераторов, параметризуйте:
Вы только что изобрели for_each. Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Февраль 10, 2016, 13:08 »

Контекст параметром передать.
А не надорветесь?  Улыбающийся

Тут поинтересовался немного как же сделать "по всем правилам", т.е. чтобы был полноценный итератор отвечающий всем требованиям std. Выходит как-то безумно, заоблачно сложно. В общем, "ни асилил"  Улыбающийся
Записан
Akon
Гость
« Ответ #23 : Февраль 11, 2016, 11:10 »

Цитировать
Вы только что изобрели for_each.
Да, это работает как for_each. Я отталкивался от изначальной авторской реализации. for_each vs открытый итератор - это скорее дело вкуса.

Цитировать
А не надорветесь?
Ну если контекст не собран в какую-нибудь структуру/класс (функтор, если с for_each), то надо собрать.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 23.