Вы можете достичь чего-то похожего в C ++, но вам не следует использовать для этого простые массивы C.
Самый простой способ увидеть эту работу - использовать std::set
с плавающей точкой (ваш код выглядит так, как будто предполагается, что данные отсортированы в порядке возрастания). Вы также можете использовать std::vector
с плавающей точкой, но вам придется отсортировать их самостоятельно, вероятно, используя std::sort
.
В этом случае ваш пример кода может выглядеть следующим образом - набор предполагает, что значения уникальны, в противном случае вы можете использовать std::multiset
вместо;
std::set<float> values(inp.data.begin(), inp.data.end());
std::set<float>::iterator idx1 = values.lower_bound(-2.14);
std::set<float>::iterator idx2 = values.upper_bound(2.0);
float res1 = (*idx1 - diff1) / 1000.0;
float res2 = (*idx2 - diff2) / 1000.0;
Обратите внимание, что приведенный выше пример кода не является 100% преобразованием вашего исходного кода - lower_bound
дает вам первый элемент, который равен или больше -2.14. Я также не вставил никакой проверочный код для сбоев - если lower_bound
или upper_bound
не может найти подходящие элементы, они вернут, например, values.end()
.
Используя вектор, пример будет выглядеть очень похоже, всего на одну строку для предварительной сортировки вектора:
std::vector<float> values(inp.data.begin(), inp.data.end());
std::sort(values.begin(), values.end();
std::vector<float>::iterator idx1 = std::lower_bound(values.begin(), values.end(), -2.14);
std::vector<float>::iterator idx2 = std::upper_bound(values.begin(), values.end(), 2.0);
float res1 = (*idx1 - diff1) / 1000.0;
float res2 = (*idx2 - diff2) / 1000.0;