STL仿函数以引用传递
#include<iostream>#include<list>#include<iterator>#include<algorithm>#include"print.h...
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
#include "print.h"
using namespace std;
class IntSequence
{
int value;
public:
IntSequence(int initialValue):value(initialValue){}
int operator()(){ return value++; }
};
int main()
{
list<int> col1;
IntSequence seq(1);
generate_n< back_insert_iterator<list<int> >,int,IntSequence&>(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,IntSequence(42));
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
}
STL标准程序库树上的理论输出是:
1 2 3 4
1 2 3 4 42 43 44 45
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
但是实际输出为:
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
也就是说为什么仿函数以引用传递没有起效果, 展开
#include <list>
#include <iterator>
#include <algorithm>
#include "print.h"
using namespace std;
class IntSequence
{
int value;
public:
IntSequence(int initialValue):value(initialValue){}
int operator()(){ return value++; }
};
int main()
{
list<int> col1;
IntSequence seq(1);
generate_n< back_insert_iterator<list<int> >,int,IntSequence&>(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,IntSequence(42));
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
generate_n(back_inserter(col1),4,seq);
PRINT_ELEMENTS(col1);
}
STL标准程序库树上的理论输出是:
1 2 3 4
1 2 3 4 42 43 44 45
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
但是实际输出为:
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
也就是说为什么仿函数以引用传递没有起效果, 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询