Сравните размер, сложность и производительность safe_insert() из упражнений 12 и 13 с версией safe_insert() из параграфа Е.4.2.
Щас попытаемся сравнить. Сразу попробую привести три варианта кода.
1 2 3 4 5 |
template<class C,class Iter> void safe_insert(C& c, Iter begin, Iter end) { c.insert(begin,end); } |
1 2 3 4 5 |
template<class C,class Iter> void safe_insert(C& c, typename C::iterator i, Iter begin, Iter end) { c.insert(i,begin,end); } |
1 2 3 4 5 6 7 8 |
template<class C,class Iter> void safe_insert(C& c, typename C::iterator i, Iter begin, Iter end) { C tmp(c.begin(),i); copy(begin,end,inserter(tmp,tmp.end()));//копируем новый элемент copy(i,c.end(),inserter(tmp,tmp.end()));//копируем "хвостовые" элементы c.insert(i,begin,end); } |
Как видно третий пример кода самый большой и сложный, ну видимо я что то ошибся и не правильно свои функции определит, я просто инкапсулировал готовые функции которые нужно просто переопределить. Не будем на них зацикливаться.
[youtube]https://www.youtube.com/watch?v=-3eT_BhrdhE[/youtube]