Как получить минимальное значение из вектора с (значение> 0) - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь уменьшить на какое-то значение все элементы вектора, которые не меньше или меньше 0.

Я действительно ничего не пробовал, потому что просто не могу обойти это,но мне нужно, например, из vector{1, 2, 3, 0, -1} значения vector[0] Я не хочу сортировать или удалять любое значение, мне нужен вектор для сохранения его "структуры".

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> R;
    //I'm sorry I can't provide any code, I can't get around with this
}

Iожидайте, например: от векторов

A = {1, 2, 3, 4, 0, -1}
B = {53, 36, 205, -8, -45, -93}

до:

A[0]
B[1]

(Это просто случайные векторы, которые приведут несколько примеров)

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Это пример использования довольно неизвестного std::lower_bound:

int smallest_positive(std::vector<int> v)
{
    std::sort(begin(v), end(v));
    return *std::lower_bound(begin(v), end(v), 0);
}

std::sort(begin(v), end(v));

Сортирует копию входного вектора. Для простых случаев это лучшее, что вы можете получить;)


[std::lower_bound] возвращает итератор, указывающий на первый элемент в диапазоне [ первый , последний ), который не меньше (то есть больше или равен) значение или последний, если такой элемент не найден.

std::lower_bound(begin(v), end(v), 1);

Сканирует отсортированный v для первого неотрицательного элемента (не менее 1) и возвращает итератор к нему. Осторожно, он возвращает недопустимый итератор, если ни один из элементов v не является положительным. Я позволю тебе это исправить;)

2 голосов
/ 08 апреля 2019

Вы можете использовать пользовательское накопление, как это:

#include <algorithm>
#include <iostream>
#include <vector>
#include <limits> //std::numeric_limits
#include <numeric> //std::accumulate
#include <iterator> //std::begin, std::end

int main()
{
    std::vector<int> R{1, 2, 3, 4, 0, -1};

    std::cout << std::accumulate(std::begin(R), std::end(R), std::numeric_limits<int>::max(), 
      [](int a, int b){if (b > 0) return std::min(a, b); return a;});
}

Возвращает максимум для целого числа, если в векторе нет строго положительного элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...