2013-05-27 77 views
0

我需要插入目標向量,但不是從向量的乞討,但使用偏移量。 這是我當前的代碼,但目標向量是從第一個元素填充的。我想利用偏移量來從特定位置插入。插入使用std :: transform從目標,從一個特定的目標偏移量

任何消耗?謝謝

要清楚:我想使用目標向量上的偏移量,而不是源。

#include <cstdlib> 
    #include <stdlib.h> 
    #include <map> 
    #include <vector> 
    #include <boost/lexical_cast.hpp> 
    #include <algorithm> 
    #include<iterator> 

    using namespace std; 

    std::string intToStr(int i){ 

    return boost::lexical_cast<std::string>(i); 
    } 

    struct Movie 
    { 
    Movie() 
     : id(0), title("title") { } 

    Movie(int id, const std::string &title) 
     : id(id), title(title) { } 


    int id;   //!< item index 
    std::string title; //!< item title 
    }; 

    struct GetTitle { std::string operator()(const Movie& cat) const { return cat.title; } }; 

    int main(int argc, char** argv) { 

    int offset = 5; 

    std::vector<Movie> p_playlist; 

    for (int i = 0; i < 20; i++) 
     p_playlist.push_back(Movie(i, std::string("Name ") + intToStr(i))); 


    std::vector<string> mEntries; 
    std::transform(p_playlist.begin(), p_playlist.end(), std::back_inserter(mEntries) , GetTitle()); 


    for(int i=0; i < mEntries.size(); i++) 
    cout << mEntries[i] << endl; 

回答

0

將其他矢量元素放在第一位。如果有必要,在做背部插入之前,使用resize(n)默認構造n初始元素。

1

如果目標矢量沒有任何元素,當然插入件從第一元件的back_inserter。它只是叫push_back,沒什麼神奇的。因此,您必須先插入前N個元素back_insert其餘:

std::vector<string> mEntries; 
insertFirstNElems(mEntries); 
std::transform(p_playlist.begin(), p_playlist.end(), std::back_inserter(mEntries) , GetTitle()); 

//... for example: 
void insertFirstNElems(std::vector<string>& vec) { 
    vec.resize(42, "meow"); 
}