求教C++ STL问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:35:38
class A {
private: int n;
public:
A(): n(0) {}
int operator() () {return n++;}
};
int main()
{
std::generate_n(std::ostream_iterator<int>(std::cout, "\n"), 10, A());
return 0;
}

想要的输出是从1到10,但由于STL的算法默认是对对象进行拷贝,而不是引用。这样以上代码就得到了错误的结果。能否对class A进行修改,得到想要的结果?
我知道可以先构造一个对象再引用,但是现在有个前提就是main函数不能修改,只从class本身下手,有没有可能?

你的 A() 要把 括号去掉吧
看看这个代码:
#include <algorithm>
#include <vector>
#include <iterator>
#include <iostream>
using namespace std;
// Value generator simply doubles the current value 数值产生器只是加倍目前的数值
// and returns it 并返回该值
template <class T>
class generate_val
{
private:
T val_;
public:
generate_val(const T& val) : val_(val) {}
T& operator()() { val_ += val_; return val_; }
};
int main()
{
int d1[4] = {1,2,3,4};
generate_val<int> gen(1);
// Set up two vectors

vector<int> v1(d1,d1 + 4), v2(d1,d1 + 4);
// Set up one empty vector
vector<int> v3;
// Generate values for all of v1
generate(v1.begin(),v1.end(),gen);
// Generate values for first 3 of v2
generate_n(v2.begin(),3,gen);
// Use insert iterator to generate 5 values f