#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
template <class T>
inline void PRINT_ELEMENTS(const T& coll,const char * optcstr = "")
{
typename T::const_iterator pos;
std::cout << optcstr;
for(pos = coll.begin(); pos != coll.end(); ++pos)
{
std::cout << *pos << ' ';
}
std::cout << std::endl;
}
class IntSequence
{
private:
int value;
public:
IntSequence (int initialValue)
: value(initialValue)
{}
int operator() ()
{
return value++;
}
};
int main(int argc, _TCHAR* argv[])
{
list<int> coll;
IntSequence seq(1);
generate_n<back_insert_iterator<list<int> >, int, IntSequence&>//在这里我声明传入参数是一个IntSequence的引用 不是值传递
(back_inserter(coll), 4, seq);//buger,这里的seq应该是IntSequence seq(1); 运行将改变seq(1)中的value为5
PRINT_ELEMENTS(coll);
generate_n (back_inserter(coll),
4,
IntSequence(42));
PRINT_ELEMENTS(coll);
generate_n (back_inserter(coll),
4,
seq);
PRINT_ELEMENTS(coll);
generate_n (back_inserter(coll),
4,
seq);
PRINT_ELEMENTS(coll);
return 0;
}
预测结果:
1 2 3 4
1 2 3 4 42 43 44 45 5 6 7 8
1 2 3 4 42 43 44 45 5 6 7 8 5 6 7 8
在vs2005下的真实运行结果:
1 2 3 4
1 2 3 4 42 43 44 45
1 2 3 4 42 43 44 45 1 2 3 4
1 2 3 4 42 43 44 45 1 2 3 4 1 2 3 4
请按任意键继续. . .