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之类的迭代适配器。