Я пытаюсь найти хорошее решение для следующей задачи:Найти максимальный размер контейнера C++
Я хочу, чтобы реализовать функцию, которая принимает переменное число аргументов контейнера и возвращает размер самого большого контейнера. Вот пример:
std::vector<std::string> vStr(2, "foo");
std::vector<int> vInt(1, 123);
std::vector<double> vDouble(3, 1.1);
std::list<char> lChar(4, '*');
// or even more container
size_t uiMaxSize = getMaxContainerSize(vStr, vInt, vDouble, lChar /*, ...*/);
в этом случае getMaxContainerSize
должна возвращать 4, потому что lChar
имеет самый большой размер 4.
Я уже реализовал этот обходной путь с помощью cstdarg
:
#include <cstdarg>
...
size_t getMaxContainerSize(int iCnt, ...)
{
size_t uiMaxSize = 0;
va_list ap;
va_start(ap, iCnt);
for(int i=0; i<iCnt; i++)
{
size_t uiTempSize = va_arg(ap, size_t);
uiMaxSize = uiMaxSize<uiTempSize ? uiTempSize : uiMaxSize;
}
va_end(ap);
return uiMaxSize;
}
...
size_t uiMaxSize = getMaxContainerSize(4, vStr.size(), vInt.size(), vDouble.size(), lChar.size());
Но с этим я должен ввести .size()
для каждого контейнера, и я также должен указать количество контейнеров. Я также не люблю использовать C-файлы в программах на C++, и я спрашиваю себя, есть ли лучший способ реализовать это. Может быть, с помощью какого-то класса и перегрузок operator<<()
, так что я могу ввести что-то вроде этого:
MaxSizeFinder cFinder;
cFinder << vStr << vInt << vDouble << lChar;
size_t uiMaxSize = cFinder.getResult();
Как вы думаете, что-то, как это возможно? Какие-либо предложения?
спасибо.
Почему бы вам никогда не захотеть этого? Но я уверен, что он разрешится с помощью шаблона переменных аргументов. –