2009-12-02

うげ、これはまずい

template<class InputIterator, class OutputIterator> OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result);

Requires: result shall not be in the range [first,last).

template<class InputIterator, class OutputIterator> OutputIterator move(InputIterator first, InputIterator last, OutputIterator result);

Requires: result shall not be in the range [first,last).

うわ、やっべ。俺の書いた既存のコード間違えまくりんぐ。

というのも、VC++のmoveやcopyは、メタプログラミングによって、使える場合はmemmove()を使っているので、コンパイルが通り、普通に動くのだ。

2 comments:

melpon said...

copy(v.begin(), v.begin() + 10, v.begin() + 5);
とか書いてたのは
copy_backward(v.begin(), v.begin() + 10, v.begin() + 15);
とかに修正しないといけなさそうですね。

萌ゑ said...

確かにそういう書き方をした事はないですね
かならず first <= last だと思ってました