std :: max_element для массива с плавающей точкой - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть функция, которая возвращает * float * like и другую, которая возвращает длину этого массива:

float *getTestData() {
    static float tdata[] = {1.0, 5.0, 10};
    return tdata; 
}

unsigned int getTestDataLen() {
    return 3;
}

Теперь я хочу найти элемент max с помощью std :: max_element. Есть ли способ получить итератор из этого массива с известной длиной во время выполнения, но не во время компиляции? Я могу использовать что угодно до C ++ 17. Возвращение getTestData - это просто пример. План состоит в том, чтобы вернуть любую длину.

1 Ответ

1 голос
/ 08 апреля 2020

Вы можете просто рассматривать float* как итератор, если вы застряли с этим конструктивным решением.

Пример:

#include <algorithm>
#include <iostream>
#include <iterator>

float *getTestData() {
    static float tdata[] = {1.0, 5.0, 10};
    return tdata; 
}

unsigned int getTestDataLen() {
    return 3;
}

int main() {    
    auto begin = getTestData();
    auto end = std::next(begin, getTestDataLen());

    auto maxit = std::max_element(begin, end);

    if(maxit != end) {
        std::cout << *maxit << '\n';
    }
}
...