[GeekBand][C++ STL与泛型编程]第九周作业
2017-09-14 本文已影响0人
readME_boy
作业要求
编写一个Sink迭代器,同时可以完成inserter迭代器和打印数值的功能
思考
先写一个inserter,然后加一个打印数值的功能,好像不是很难弄。。
编程
先把课件上的代码抄下来,然后试着编译一下,或者可以直接去查看std::inserter源码,然后改变一下变成 Sink_iterator, 不然inserter很容易让编译器跟std::inserter混淆报错
template< class Container >
std::insert_iterator<Container> Sink_iterator( Container& c, typename Container::iterator i )
{
return std::insert_iterator<Container>(c, i);
}
然后在调用iterator的时候加入打印数值的步骤
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;
}
运行结果
compile.png最终效果和老师在课堂上给出的一样
standard.png