Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Lorentinka
2 / 2 / 0
Регистрация: 02.02.2016
Сообщений: 75
1

Лямбда-функция: поиск нечётных значений в set<int>

06.02.2019, 10:13. Просмотров 1760. Ответов 4
Метки нет (Все метки)

Дан : set<int> st{1,2,3,4,5,6,7,8,9,10} .С помощью лямбда-функции реализовать поиск нечётных значений.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<set>
#include<iostream>
#include<iterator>
#include <algorithm>
 
using namespace std;
int main(){
set<int> v = { 1,2,3,4,5,6,7,8,9 };
    
    set<int> ::iterator it;
for_each(v.begin(), v.end(), [v](auto it) {if ((*it mod 2) == 1) { cout << ostream_iterator<int>(cout, " "); }});
 
        system("pause");
        return 0;
}
Возникает вопрос что писать в параметрах лямбда функции и как вывести нечётные значения.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2019, 10:13
Ответы с готовыми решениями:

Ошибка: невозможно конвертировать лямбда-выражение в int
Ошибка в 7 строчке.пишет что не может конвертировать лямбда-выражение в int. #include &lt;iostream&gt;...

Set <int>
Доброе время суток, помогите оптимизировать данный код set &lt; int &gt; temp; temp.insert(1);...

Нужно сделать чтоб функция "int" выводила массив значений.достиг вывода 1-го элемента
Нужно сделать чтоб функция &quot;int&quot; выводила массив значений.достиг вывода 1-го элемента Текст,...

Позиция элемента в контейнере STL кон. SET, поиск контейнер set словарь позиция
Есть код №1. Он выводить на экран позицию нужного мне слова (только если в середине 1 слово а не 2...

лямбда функция
привет всем! не понимаю в чем ошибка...вот код vector&lt;string&gt; tmp_count; list&lt;string&gt;...

4
Peoples
Эксперт С++
1423 / 892 / 773
Регистрация: 06.02.2016
Сообщений: 2,344
Записей в блоге: 19
Завершенные тесты: 5
06.02.2019, 10:21 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <set>
#include <iostream>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::set<int> v{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    copy_if(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout," "), [](const int &x){
        return x & 1;
    });
}
2
Lorentinka
2 / 2 / 0
Регистрация: 02.02.2016
Сообщений: 75
06.02.2019, 10:43  [ТС] 3
А в квадратных скобках не нужно явно указывать множество на котором мы производим операции?Или это не обязательно?
И возможно ли это реализовать через for_each()?
0
ReDoX
439 / 327 / 170
Регистрация: 01.07.2015
Сообщений: 1,162
06.02.2019, 14:14 4
Лучший ответ Сообщение было отмечено Lorentinka как решение

Решение

Цитата Сообщение от Lorentinka Посмотреть сообщение
А в квадратных скобках не нужно явно указывать множество на котором мы производим операции?Или это не обязательно?
Мы пробегаемся по контейнеру через итераторы, зачем нам еще захватывать его?

Цитата Сообщение от Lorentinka Посмотреть сообщение
И возможно ли это реализовать через for_each()?
C++
1
for_each(v.cbegin(), v.cend(), [](const auto& a) { if (a % 2 != 0) cout << a << ' '; });
2
SomniPhobia
352 / 256 / 101
Регистрация: 22.11.2017
Сообщений: 707
06.02.2019, 14:28 5
Лучший ответ Сообщение было отмечено Lorentinka как решение

Решение

Цитата Сообщение от Lorentinka Посмотреть сообщение
Или это не обязательно?
Это не обязательно. Квадратный скобки - это захват. Его не обязательно использовать. Он нужен для подхвата внешних переменных, экземпляров, которые не передаются через скобки. for_each() в функцию лямбды передаёт только 1 значение за проход - значение текущего элемента контейнера. for_each() требует чтобы входная сигнатура лямбды имела строго 1 параметр на приём. А если надо что - то передать в функцию по которой работает for_each(), то используется захват, чтобы не попортить входную сигнатуру функции. При использовании захвата получится не функция а функтор.
ReDoX всё грамотно написал.
Вот мой вариант.
C++
1
2
3
4
5
6
7
set<int> st{ 1,2,3,4,5,6,7,8,9,10 };
    auto f = [](const int &value)
    {
        cout << (value & 1u ? to_string(value) + " " : "");
    };
    for_each(st.begin(), st.end(), f);
    cout << endl;
1
06.02.2019, 14:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2019, 14:28

Set_difference для set<int>
Данный код породдает сообщение об ошибке при компиляции, почему он не запускается? #include...

Пусть объявлена функция void f(int i,int &j){.}. Параметр j является параметром
1)Пусть объявлена функция void f(int i,int &amp;j){...}. Параметр j является параметром a. по...

set<vector<int> >, вывод елементов
Возможно глупый вопрос, но я как-то завис на этом. Как правильно вывести элементы из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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