Как написать метод, который принимает общий итератор в качестве входного аргумента?


Теперь у меня есть куча этих методов ( вы можете сказать, как некрасиво он выглядит):

void ConvertUtility::ConvertEdgeIndexList(const list<EdgeIndex> &edgeIndex)
{

     list<EdgeIndex>::const_iterator sit;
     for(sit=edgeIndex.begin(); sit!=edgeIndex.end(); sit++)
     {

     }
}


void ConvertUtility::ConvertEdgeIndexList(const vector<EdgeIndex> &edgeIndex)
{

     vector<EdgeIndex>::const_iterator sit;
     for(sit=edgeIndex.begin(); sit!=edgeIndex.end(); sit++)
     {

     }
}

Есть в любом случае я могу совместить эти две функции в одну функцию?



4654
7
c++
задан 3 октября 2011 в 03:10 Источник Поделиться
Комментарии
2 ответа

Как насчет:

template<typename C>
void ConvertUtility::ConvertEdgeIndexList(C const& edgeIndex)
{
typename C::const_iterator sit;
for(sit=edgeIndex.begin(); sit!=edgeIndex.end(); ++sit)
{ // ^^ Prefer pre-increment on iterators.

}
}

ПС. Сайте StackOverflow может быть лучше место для этого типа вопроса.

6
ответ дан 3 октября 2011 в 05:10 Источник Поделиться

Я бы функцию, принимающую универсальный итератор диапазона, в стиле стандартных алгоритмов.

template <typename Iterator>
void ConvertUtility::ConvertEdgeIndexList(Iterator start, Iterator end)
{
for (Iterator sit = start; sit != end; ++sit)
{

}
}

Если вам нужен конкретный тип итератора (например, ForwardIterator, или RandomAccessIterator), затем имя параметра шаблона является хорошим местом для документа, который.

6
ответ дан 3 октября 2011 в 03:10 Источник Поделиться