Добрый день уважаемые!
Я новичок с++.
Разбираюсь в STL. (или по-крайней мене пытаюсь)
inline
void fillSomeStringContainer (StringContainer& _cMyCont, std::string*
start, std::string* end)
{
std::string* cur = start;
while (cur != end)
{
_cMyCont[current-start] = *current;
++current;
}
}
как создать template function для работы с любым forward_iterator?
Posted via RSDN NNTP Server 1.9
Здравствуйте, seego, Вы писали:
S>как создать template function для работы с любым forward_iterator?
Стандарт предъявляет к каждой категории итератора свои требования.
Достаточно придерживатся этих требований при реализации функции и всё.
Вот краткий список операций допустимых для Forward Iterators
*iter
iter->member
++iter
iter++
iter1 == iter2
iter1 != iter2
iter1 = iter2
А вот пример функции из STL которая работает с любыми Forward Iterators
template<class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& value);
{
for (; first != last; ++first)
*first = value;
}
Здравствуйте, seego, Вы писали:
S>S>inline
S>void fillSomeStringContainer (StringContainer& _cMyCont, std::string*
S>start, std::string* end)
S>{
S> std::string* cur = start;
S> while (cur != end)
S> {
S> _cMyCont[current-start] = *current;
S> ++current;
S> }
S>}
S>
S>как создать template function для работы с любым forward_iterator?
Применительно к твоей функции.
template<class Dst, // контейнер с произвольным доступом, судя по виду функции
class SrcIt // итератор - обобщение указателя
>
void fillSomeContainer(Dst& cont, Src start, Src end)
{
// нам потребуется счётчик, т.к. измерять разность у Forward Iterator - это долго
typedef typename iterator_traits<Src>::distance_type key_type; // или просто int
key_type key = 0;
while(start != end)
cont[key++] = *(start++);
}
Кстати, ведущее подчёркивание в именах — зарезервировано Стандартом для нужд реализаций. Можно случайно нарваться на конфликт с диалектом языка или служебными именами библиотек.