Общая функция для выравнивания контейнера контейнеров

Я пытаюсь лучше понять итераторы и общие функции. Я подумал, что было бы полезным упражнением написать функцию, которая преобразует container1 > в container3 . Например, он должен иметь возможность конвертировать vector > в list .

Я решил, что доступ к контейнеру должен осуществляться через итераторы,как функции в .

Вот мой код:

#include <iterator>
#include <algorithm>

// COCiter == Container of Containers Iterator
// Oiter == Output Iterator
template <class COCiter, class Oiter>
void flatten (COCiter start, COCiter end, Oiter dest)
{
    using namespace std;

    while (start != end) {
        dest = copy(start->begin(), start()->end(), dest);
        ++start;
    }
}

Но когда я пытаюсь вызвать его в следующем коде:

int main ()
{
    using namespace std;

    vector< vector<string> > splitlines;
    vector<string> flat;

    /* some code to fill SPLITLINES with vectors of strings */

    flatten(splitlines.begin(), splitlines.end(), back_inserter(flat));
}

, я получаю огромное сообщение об ошибке шаблона C ++, undefined ссылка на void flatten <... страницы шаблонов ...

Мне кажется, что мой код было слишком легко написать, и мне нужно еще кое-что, чтобы гарантировать, что тип данных во внутренних контейнерах соответствует тип данных в выходном контейнере. Но я не знаю, что делать.

7
задан japreiss 19 June 2011 в 20:32
поделиться