Каков самый быстрый способ проверить, имеют ли все элементы в векторе одинаковое значение в С++

Примечание: vector<int> vec = {0, 0, 0} возвращает истину

Итак, у меня есть решение, оно выглядит так:

bool check(vector<char> vec)// can't think of a better name
{
    char firstChar {vec[0]};
    for (char i : vec)
    {
        if (i != firstChar)
            return false;
    }
    return true;
}

Но так как я новичок, есть ли лучшее решение?


person justANewbie    schedule 21.10.2020    source источник
comment
Это не выглядит плохо. Подробности здесь: bool check(vector<char> vec) вы выполняете копирование вектора. Лучше: bool check_constant (const vector<char> &vec). Вы также можете использовать std::string вместо std::vector.   -  person Damien    schedule 21.10.2020
comment
@Дэмиен, спасибо за совет!   -  person justANewbie    schedule 21.10.2020
comment
и не забудьте сначала сделать пустую проверку перед получением vec[0]   -  person RvdK    schedule 21.10.2020
comment
Предполагая, что vec имеет хотя бы один элемент, std::count(vec.begin(), vec.end(), vec[0]) == vec.size() сделает это. Проверка хотя бы одного элемента тривиальна.   -  person Peter    schedule 21.10.2020
comment
Алгоритмически быстрого метода не существует. Так как вы должны проверить все значения. Лучшее, что вы можете сделать, это остановиться после первого не равного значения. В лучшем случае первое значение не совпадает. В худшем случае все значения равны (это означает, что вы обработали все элементы массива). Реализация алгоритма может принести вам несколько наносекунд или, в лучшем случае, микросекунд.   -  person Thomas Matthews    schedule 21.10.2020