STL std::生成c++,如何编写函数调用
stl std::generate c++, how to write the function call
我有一个编程作业他们给我们提供了头文件其中包含:
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);
}
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 变量没有改变?通过向量的函数调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 模板函数调用
- 获取从C++中同一类中的构造函数调用的方法返回的值
- 析构函数调用
- 在为函数编写单元测试时,我应该模拟所做的内部函数调用吗?
- C++,当函子不是一个选项时,我如何编写带有自定义函数调用的模板化 RAII 包装器?
- 在另一个.cpp文件中调用的编写函数
- 如何在 C++14 中编写用于调用 Fortran 函数的通用包装器(按引用调用 --按值调用>)
- 如何编写一个可以处理对象或指针函数调用的模板函数
- 如何编写函数指针比调用它们更好
- STL std::生成c++,如何编写函数调用
- c++在空类中编写和调用什么函数?
- 当我们不想用对象调用函数时,如何编写和调用不带对象的函数
- 如何编写函数并从main调用它们
- 使用 &参数为调用编写函数标头