64,643
社区成员
发帖
与我相关
我的任务
分享
代码如下:
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
class IntSequence
{
private:
int value;
public:
IntSequence( int init):value(init){}
int operator()()
{
return value++;
}
void getvalue()
{
cout<<value<<endl;
}
};
int main()
{
vector<int> coll;
IntSequence seq(13);
generate_n<back_insert_iterator<vector<int> >,int,IntSequence&>(back_inserter(coll),9,seq);
//by reference方式,对象seq的成员变量value应该会随之变化
seq.getvalue();
//然而,输出value仍然为13,不解,由此对vs2005产生了疑问?
generate_n(back_inserter(coll),9,seq);
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
return 0;
}
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
class IntSequence
{
private:
int value;
public:
IntSequence( int init) : value( init ) {}
inline int operator()()
{
return value ++;
}
inline operator int() const
{
return value;
}
};
class MyWrapper
{
public:
MyWrapper(IntSequence &data) : data_(data) {}
MyWrapper(const MyWrapper &rhs) : data_(rhs.data_) {}
inline int operator () () const
{
return data_();
}
private:
IntSequence &data_;
};
int main()
{
vector<int> coll;
IntSequence seq(13);
generate_n(back_inserter(coll),9,MyWrapper(seq));
cout << seq << endl;
copy(coll.begin(),coll.end(),ostream_iterator<int>(cout," "));
return 0;
}