#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

template <typename OutputInserter>
void split(const string &line, OutputInserter inserter, char delim)
{
    register unsigned pos_start = 0;
    register unsigned pos_end   = 0;
 
    while((pos_end = line.find(delim, pos_start)) != string::npos)
    {
        *inserter = line.substr(pos_start, pos_end-pos_start);
        pos_start = pos_end+1;
        ++inserter;
    }
 	if (line.back() == delim) return;
 	*inserter = line.substr(pos_start);
 	++inserter;
}
int main() 
{
	string test1 = "1;2;3;4;5;6";
	vector<string> splited;
	split(test1, back_inserter(splited), ';');
	for (auto it: splited) 
		cout<<it<<endl;
	return 0;
}