作業(yè)要求
編寫一個(gè)Sink迭代器阱驾,同時(shí)可以完成inserter迭代器和打印數(shù)值的功能
思考
先寫一個(gè)inserter拘泞,然后加一個(gè)打印數(shù)值的功能,好像不是很難弄。三妈。
編程
先把課件上的代碼抄下來畜埋,然后試著編譯一下,或者可以直接去查看std::inserter源碼畴蒲,然后改變一下變成 Sink_iterator, 不然inserter很容易讓編譯器跟std::inserter混淆報(bào)錯(cuò)
template< class Container >
std::insert_iterator<Container> Sink_iterator( Container& c, typename Container::iterator i )
{
return std::insert_iterator<Container>(c, i);
}
然后在調(diào)用iterator的時(shí)候加入打印數(shù)值的步驟
std::cout << "[";
std::copy( c.begin(), c.end(), std::ostream_iterator<int>( std::cout, " " ) );
std::cout << "]\n";
最后附上測試代碼悠鞍,和老師課件中的測試代碼一樣
int main () {
std::list<int> foo,bar;
for (int i=1; i<=5; i++)
{ foo.push_back(i); bar.push_back(i*10); }
std::list<int>::iterator it = foo.begin();
advance (it,3);
std::copy (bar.begin(),bar.end(), Sink_iterator(foo,it));
std::cout << "foo contains:";
for ( std::list<int>::iterator it = foo.begin(); it!= foo.end(); ++it )
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
運(yùn)行結(jié)果
最終效果和老師在課堂上給出的一樣