すまん
#include <iostream>
#include <iterator>
template <typename InputIterator, typename OutputIterator, typename Type>
OutputIterator
zcopy(InputIterator src, OutputIterator dst, Type value)
{
    for (;;) {
        *dst = *src;
        if (*src == value)
            break;
        ++dst;
        ++src;
    }
    return dst;
}
int main()
{
    int m1[] = { 1, 2, 3, 4, 5, 0 }, m2[10], m3[10];
    zcopy(m1, m2, 0);
    zcopy(m2, m3, 0);
    zcopy(m3, std::ostream_iterator<int>(std::cout, " "), 0);
    std::cout << '\n';
}