美文网首页
[GeekBand][C++ STL与泛型编程]第九周作业

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

作者: readME_boy | 来源:发表于2017-09-14 13:17 被阅读0次

    作业要求

    编写一个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

    相关文章

      网友评论

          本文标题:[GeekBand][C++ STL与泛型编程]第九周作业

          本文链接:https://www.haomeiwen.com/subject/rmcdsxtx.html