什么是生成器函数,举个C++例子
时间: 2024-03-18 11:39:53 浏览: 13
生成器函数是一种特殊的函数,它可以生成一个序列(例如数字、字符串等),而不是一次性返回整个序列。当需要处理大量数据时,这种生成器函数可以提供更高效的解决方案,因为它可以按需生成数据,而不是一次性生成整个序列。
在 C++ 中,使用 `yield` 关键字可以创建一个生成器函数。`yield` 关键字用于将一个值返回给调用者,并且暂停函数的执行,等待下一次调用。下面是一个简单的使用 `yield` 关键字的 C++ 生成器函数的例子:
```c++
#include <iostream>
#include <vector>
std::vector<int> generator(int start, int end) {
for (int i = start; i <= end; ++i) {
co_yield i;
}
}
int main() {
for (auto x : generator(1, 5)) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
```
在上面的代码中,`generator` 函数使用 `co_yield` 关键字生成从 `start` 到 `end` 的整数序列。在 `main` 函数中,我们通过循环遍历生成器函数返回的序列,并将每个值输出到控制台。需要注意的是,使用生成器函数需要使用协程(coroutine)支持,因此需要在编译时启用协程支持。
相关问题
举个详细的生成器类C++代码例子
以下是一个简单的生成器类 C++ 代码例子:
```c++
#include <iostream>
#include <string>
#include <vector>
class Generator {
public:
Generator() = default;
~Generator() = default;
void addWord(const std::string& word) {
words.push_back(word);
}
std::string generate() {
std::string sentence;
for (const auto& word : words) {
sentence += word + " ";
}
sentence.pop_back(); // remove last space
sentence += "."; // add period at the end
return sentence;
}
private:
std::vector<std::string> words;
};
int main() {
Generator generator;
generator.addWord("The");
generator.addWord("quick");
generator.addWord("brown");
generator.addWord("fox");
generator.addWord("jumps");
generator.addWord("over");
generator.addWord("the");
generator.addWord("lazy");
generator.addWord("dog");
std::cout << generator.generate() << std::endl;
return 0;
}
```
这个生成器类可以添加单词,然后生成一个包含这些单词的句子。在 `main` 函数中,我们添加了一些单词,然后调用 `generate` 函数生成句子并输出到控制台。这个例子很简单,但是你可以根据自己的需求进行扩展和修改。
随机数生成器 c++ 代码
这是一个随机数生成器的 C 代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int i, n;
time_t t;
n = 5;
/* 初始化随机数生成器 */
srand((unsigned) time(&t));
/* 生成并打印随机数 */
for( i = 0 ; i < n ; i++ ) {
printf("%d\n", rand() % 50);
}
return 0;
}
注意,在使用随机数生成器时,需要先调用 srand() 函数来初始化生成器。在这个例子中,我们使用了当前时间作为初始化参数,以确保每次运行程序时都会生成不同的随机数序列。