170 похожих чатов

Тут я несколько раз прохожу массив, я могу сделать все

за 1 проход?
auto min_element = std::min_element(v.begin(), v.end());
auto first_positive = std::find_if (v.begin(), v.end(), [](int a) { return a > 0; });
auto latest_positive = std::find_if (v.begin(), v.end(), [](int a) { return a > 0; });
std::accumulate(v.begin(), v.end(), 0, [](int a, int b){return b > 0 ? a + b : a; });

12 ответов

10 просмотров

ну в твоём коде можно просто убрать первые 3 строки

Пидорбот- Автор вопроса
Егор (Дима)
ну в твоём коде можно просто убрать первые 3 строк...

а если мне нужно находить эти значения и выводить

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

Пидорбот- Автор вопроса
Kelbon
почему у тебя первый и последний позитив находятся...

а, там должен был быть реверсный итератор

Можно, допустим, вот так: #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <iterator> int main() { std::vector<int> a { -1, 0, 3, 4, -5, 6, -7, 8, 9, -10, 0 }; int x = std::accumulate(find_if(a.begin(), a.end(), [](const int a) { return a > 0; }), std::next(a.begin(), std::distance(find_if(a.rbegin(), a.rend(), [](const int a) { return a > 0; }), a.rend())), 0); std::cout << x; } Правда, по-хорошему тут нужно ещё проверку сделать, типа: auto first = find_if(a.begin(), a.end(), [](const int a) { return a > 0; }); int x = 0; if (first != a.end()) { x = std::accumulate(first, std::next(...), 0); } Иначе всё рухнет, если положительных чисел нет.

Eugene Krasnikov (ᴊɪɴ x)
Можно, допустим, вот так: #include <iostream> #in...

вроде прям за 1 проход делается если найти 2 итератора на первый и последнийэ лемент и между ними пройти, в чем проблема?

Yalokin Kononov
да так и надо

а в чем проблема то?

Kelbon
а в чем проблема то?

ни в чем, так и надо

Eugene Krasnikov (ᴊɪɴ x)
Можно, допустим, вот так: #include <iostream> #in...

Во, переделал немного :) #include <iostream> #include <vector> #include <algorithm> #include <numeric> #include <iterator> int main() { std::vector<int> a { -1, 0, 3, 4, -5, 6, -7, 8, 9, -10, 0 }; int x = 0; auto first = find_if(a.begin(), a.end(), [](const int a) { return a > 0; }); if (first != a.end()) { x = std::accumulate(first, find_if(a.rbegin(), a.rend(), [](const int a) { return a > 0; }).base(), 0); } std::cout << x; }

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта