代码之家  ›  专栏  ›  技术社区  ›  Benjamin Lindley

C++:我如何编写一个函数,接受迭代器并插入元素?

  •  1
  • Benjamin Lindley  · 技术社区  · 14 年前
    template<class Container>
    void BlitSurface::ExtractFrames(Container & output, int frame_width, int frame_height,
                                             int frames_per_row, int frames_per_column,
                                             bool padding) const
    {
        SDL_Surface ** temp_surf = SDL_Ex_ExtractFrames(_surface, frame_width, frame_height, frames_per_row, frames_per_column, padding);
    
        int surface_count = frames_per_row * frames_per_column;
    
        output.resize(surface_count);
        Container::iterator iter = output.begin();
    
        for(int i=0; i<surface_count; ++i, ++iter)
            iter->_surface = temp_surf[i];
    
        delete [] temp_surf;
    }
    

    我有这个函数将图像分割成帧,并将它们存储到一个图像容器中。我该如何修改它以采用迭代器而不是容器,并在该点插入元素?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Johannes Schaub - litb    14 年前

    使用 back_inserter :

    template<typename OutputIterator>
    void BlitSurface::ExtractFrames(OutputIterator it, int frame_width, int frame_height,
                                             int frames_per_row, int frames_per_column,
                                             bool padding) const
    {
        /* ... other lines unchanged ...*/
        for(int i=0; i<surface_count; ++i) {
            // "BlitSurface()" sets other members to zero. Alternatively you
            // can use boost::value_initialized for that. 
            BlitSurface bs = BlitSurface();
            bs._surface = temp_surf[i];
            *it++ = bs;
        }
        delete [] temp_surf;
    }
    

    ExtractFrames(std::back_inserter(container), ...);