A "home-brew" copy without the hacks.

I'm trying to mimic std::copy() and I came up with the following

1
2
3
4
5
6
7
8
9
10
11
template<typename iter1, typename iter2>
iter2 mycopy(iter1 f1, iter1 e1, iter2 f2)
{
    while(f1 != e1) {
        *f2 = *f1;
        f1++;
        f2++;
    }
    f2--; //hack-ish
    return f2;
}


That f2-- is quite hack-ish and ugly. Does anyone know a better implementation of this that only uses primitive facilities?
Last edited on
f2-- is wrong. Why do you think you need that? See:

http://www.cplusplus.com/reference/algorithm/copy/?kw=copy
does the built - in one not move blocks of memory or have performance enhancements that you won't get in a brute force loop?
I suspect that the built-in one relies on the compiler's optimization to handle performance enhancements.
From cppreference:
http://en.cppreference.com/w/cpp/algorithm/copy

Possible implementation, First version:

1
2
3
4
5
6
7
8
9
template<class InputIt, class OutputIt>
OutputIt copy(InputIt first, InputIt last, 
              OutputIt d_first)
{
    while (first != last) {
        *d_first++ = *first++;
    }
    return d_first;
}


To me that looks like the classic K&R copy idiom from way back then :+)

As jonnin says, the notes mention std::memmove, and the requirements about the types.
Last edited on
Topic archived. No new replies allowed.