Функция, которая возвращает максимум переменного числа скаляров

Мне нужно создать функцию, которая принимает в качестве входного значения переменное число скаляров и возвращает самую большую. Точно так же, как std :: max() делает для 2 элементов, но мне нужно это для неопределенного количества элементов, может быть 2 или 5 или 10 и т.д. Любые предложения о том, как подойти к этому?

Я использую Visual Studio 2010. Я пробовал:

std::max({2, 8, 5, 3})

Ошибка: ни один экземпляр перегруженной функции "std :: max" не соответствует списку аргументов

std::vector<int> v {2, 8, 5, 3};
</int>

Ошибка: ожидается a; (после v)

И что более важно, если я помещу это в функцию, как у меня есть переменное количество аргументов и как я их называю? Думаю, это должно быть как-то с шаблоном?

Для чего мне это нужно: я работаю с кучей векторов, карт и т.д., И мне нужно выяснить, у кого больше всего элементов. Поэтому я подумал, что мне нужно что-то вроде

int biggest = max(vector1.size(), vector2.size(), map1.size(), ...);
1 ответ

Используйте std::max_element, если у вас уже заполнен контейнер

std::vector<int>::iterator it = std::max_element( vector1.begin(), vector1.end() );
</int>

Else использует простой массив, например:

int a[] = {2, 8, 5, 3 }; // add whatever elements you want
int *pos = std::max_element( a, a+sizeof(a)/sizeof(a[0]) ) ;

licensed under cc by-sa 3.0 with attribution.