STL std::生成c++,如何编写函数调用

stl std::generate c++, how to write the function call

本文关键字:何编写 函数调用 c++ std 生成 STL      更新时间:2023-10-16

我有一个编程作业他们给我们提供了头文件其中包含:

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

我假设他们给我的头文件不包含任何错误。我该怎么写才能让函数被调用呢?

generate接受函数指针或对函子实例的引用。以下两个调用是正确的。如果vector为空,则为无操作。

// 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);
}