所以我有一个编程任务,他们为我们提供了包含以下内容的头文件:
class SEQ{
private:
...// stuff
public:
...//constructor
string operator ( ) ( ) {
string tmp = id; int i = nd - 1;
if ( id [ i ] < '9' ) id [ i ]++;
else {
id [ i ] = '1'; bool flag = true;
for ( i--; i >= 0 && flag; i-- )
if ( id [ i ] < 'Z' ) { id [ i ]++; flag = false; }
else id [ i ] = 'A';
}
return tmp;
}
}
我应该在std :: vector上使用std :: generate。但是,函数永远不会被调用。我试过用这些方法写它:
vector<string> v;
for (int i = v.size(); i < in.N; i++) v.push_back("");
generate(v.begin(), v.end(), SEQ); // compiler error
generate(v.begin(), v.end(), SEQ()); // no error but does nothing
SEQ seq; // declare an instance
generate(v.begin(), v.end(), seq); // no error but does nothing
generate(v.begin(), v.end(), seq()); // compiler error algorithm line 1527 does not evaluate to a function that takes 0 arguments
我假设他们给我的头文件不包含任何错误。我怎么写这个以便调用函数?
答案 0 :(得分:0)
generate
获取函数指针或对仿函数实例的引用。以下两个调用是正确的。如果向量为空,它们是无操作。
// pass a default-constructed temporary instance
generate(v.begin(), v.end(), SEQ{});
// pass a named instance
SEQ seq;
generate(v.begin(), v.end(), seq);
以下作品:
#include <algorithm>
#include <vector>
#include <cassert>
int main()
{
std::vector<size_t> v(10);
auto seq = [a = 0]() mutable { return a++; };
std::generate(v.begin(), v.end(), seq);
assert(v.begin() != v.end());
for (size_t i = 0; i < v.size(); ++i)
assert(v[i] == i);
}