[GeekBand][C++ STL与泛型编程]第九周作业

作业要求

编写一个Sink迭代器,同时可以完成inserter迭代器和打印数值的功能

思考

先写一个inserter,然后加一个打印数值的功能,好像不是很难弄。。

编程

先把课件上的代码抄下来,然后试着编译一下,或者可以直接去查看std::inserter源码,然后改变一下变成 Sink_iterator, 不然inserter很容易让编译器跟std::inserter混淆报错

template< class Container >
std::insert_iterator Sink_iterator( Container& c, typename Container::iterator i )
{
    return std::insert_iterator(c, i);
}

然后在调用iterator的时候加入打印数值的步骤

    std::cout << "[";
    std::copy( c.begin(), c.end(), std::ostream_iterator( std::cout, " " ) );
    std::cout << "]\n";

最后附上测试代码,和老师课件中的测试代码一样

int main () {
  std::list foo,bar;
  for (int i=1; i<=5; i++)
  { foo.push_back(i); bar.push_back(i*10); }

  std::list::iterator it = foo.begin();
  advance (it,3);

  std::copy (bar.begin(),bar.end(), Sink_iterator(foo,it));

  std::cout << "foo contains:";
  for ( std::list::iterator it = foo.begin(); it!= foo.end(); ++it )
    std::cout << ' ' << *it;
  std::cout << '\n';

  return 0;
}

运行结果

[GeekBand][C++ STL与泛型编程]第九周作业_第1张图片
compile.png

最终效果和老师在课堂上给出的一样


[GeekBand][C++ STL与泛型编程]第九周作业_第2张图片
standard.png

你可能感兴趣的:([GeekBand][C++ STL与泛型编程]第九周作业)