back_inserter的用法

时间:2023-03-09 23:35:00
back_inserter的用法

1,代码如下:

#include<iostream>
#include<list>
#include<algorithm>
#include<iterator>
#include<vector>
using namespace std;
class IntSequence
{
private:
    int value;
public:
    //constructor
    IntSequence(int initialValue):value(initialValue){}
    //function call
    int operator()() //注意2个括号,第一个括号表示重载
    {
        return value++;
    }
};
int main()
{
    vector<);
    //vector<int> vecList;
    generate_n(vecList.begin(),,IntSequence());//没有使用back_inserter
    copy(vecList.begin(),vecList.end(),ostream_iterator<int>(cout," "));
    cout<<endl;

    list<int> coll;
    //insert value from 1 to 9;
    generate_n(back_inserter(coll),,IntSequence());//必须使用back_inserter,否则编译通过,运行报错。
    //generate_n(coll.begin(),9,IntSequence(1));//编译通过,运行报错
    copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
    cout<<endl;
    //replace second to last element but one with values
    //starting at 42
    generate(++coll.begin(),--coll.end(),IntSequence());
    copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
    cout<<endl;
    ;
}

因为list定义的时候没有大小,即没有分配空间,插入失败报错。vector定义了大小为12,所以可以直接插入,不用通过back_inserter之类的迭代适配器。