#include <iostream>
#include <algorithm>
#include <vector>
#include <list>

    template <typename TContainer>
    TContainer fill(typename TContainer::value_type start, 
                    typename TContainer::value_type step, 
                    typename TContainer::value_type end) {
        size_t size = static_cast<size_t>((end - start)/step + 1);
        TContainer output(size);
        std::generate(std::begin(output), std::end(output), 
            [&start, step]() { 
                auto temp = start; start += step; return temp;
            }
        );
        return output;
    }



int main() {
	
	
	auto vec = fill<std::vector<int>>(0, 2, 10);
	std::cout << "vec: ";
	for (auto i : vec) {
		std::cout << i << ", ";
	}
	std::cout << std::endl;
	
	auto list = fill<std::list<float>>(1, 0.3, 5);
	std::cout << "list: ";
	for (auto f : list) {
		std::cout << f << ", ";
	}
	std::cout << std::endl;
	
	// your code goes here
	return 0;
}