Напишите safe_insert() (параграф Е.4.2), которая вставляет элементы в существующий vector (а не копирует во временную переменную). Какие ограничения придется наложить на операции?
От функция которая копирует элементы во временную переменную:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream> using std::cout; using std::endl; #include <vector> using std::vector; #include <iterator> using std::inserter; #include <algorithm> using std::copy; 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()));//копируем "хвостовые" элементы swap(c,tmp); } int main() { vector<int> v(4,5); vector<int> vv(3,2); int val=8; vector<int>::iterator it=v.begin(); safe_insert<vector<int>,vector<int>::iterator>(v,it,vv.begin(),vv.end()); for(int i=0;i<v.size();i++) cout <<v[i]<<' '; cout <<endl; return 0; } |
Попробуем щас сделать без копирования. От что пришло мне в голову это инкапсулировать insert()
1 2 3 4 5 6 7 8 9 10 |
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); //swap(c,tmp); } |
Я не знаю какие ограничения она наложить, короче проедим эту тему.
[youtube]https://www.youtube.com/watch?v=Lw1c7fajs0I[/youtube]