📜  C++ STL-algorithm.generate()函数(1)

📅  最后修改于: 2023-12-03 14:59:45.480000             🧑  作者: Mango

C++ STL-algorithm.generate()函数

在C++ STL中,algorithm.generate()是一个非常强大的函数,它可以帮助程序员在给定的范围内生成值,从而填充容器。这个函数是通过将一个生成器函数应用于每个范围内的元素,将一个容器填充了特定数量的值。

首先,让我们看一下algorithm.generate()的基本语法:

generate(ForwardIt first, ForwardIt last, GeneratorFn gen);

这个函数接受三个参数:

  • firstlast是要填充的容器中的迭代器,其中first指向要从中开始填充值的第一个元素,last指向终止位置的下一个元素;
  • GeneratorFn是一个可调用对象,它接受一个参数并返回一个值,用于生成每个元素的值。

接下来,让我们看一个简单的例子来帮助你更好地理解该函数是如何工作的。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> vec(10);
    
    std::generate(vec.begin(), vec.end(), [] { return rand() % 100; });
    
    for (const auto& v : vec) {
        std::cout << v << ' ';
    }
    std::cout << std::endl;
}

在这个简单的例子中,我们首先定义了一个名为vec的vector并分配了10个整数的空间。然后我们调用了algorithm.generate()并传递了一个lambda函数作为生成器,该lambda函数将每个元素设置为一个随机数。

注意,我们在调用rand()函数时没有提供种子,这意味着我们将使用默认种子为1的伪随机数生成器。因此,这个程序将生成一个随机的10个数字的向量并将其打印在控制台上。

除了使用lambda表达式作为生成器函数之外,您还可以使用任何其他可调用对象,例如函数对象或普通函数。

接下来,让我们看一下一些algorithm.generate()的其他用例。

使用algorithm.generate()生成递增序列

除了使用生成器函数来生成随机数之外,algorithm.generate()还可以用于生成递增序列。在这种情况下,你可以编写一个简单的函数,用于按照特定规则生成一个序列。

让我们看一个简单的例子,其中我们将使用一个名为increment()的函数来生成一个递增的序列。

#include <iostream>
#include <algorithm>
#include <vector>

int increment(int& i) { return i++; }

int main() {
    std::vector<int> vec(10);
    
    int n = 0;
    std::generate(vec.begin(), vec.end(), [&n] { return increment(n); });
    
    for (const auto& v : vec) {
        std::cout << v << ' ';
    }
    std::cout << std::endl;
}

在这个例子中,我们首先定义了一个名为increment()的函数,它接受一个引用并返回一个递增的值。然后我们定义了一个名为vec的vector并通过调用std::vector<int> vec(10);来分配10个整数的空间。

接下来,我们定义了一个名为n的变量并将其初始化为0。然后我们调用了algorithm.generate()并使用increment()函数作为生成器函数。该函数返回n的当前值并将其递增。

最后,我们迭代vector并将其打印在控制台上。在这个例子中,输出应该是从0到9的整数。

使用algorithm.generate()生成重复值

最后,让我们看一下如何使用algorithm.generate()来生成重复的值。在这种情况下,我们可以简单地返回一个静态值作为生成器函数。例如,以下代码将使用algorithm.generate()生成一个vector并将其所有元素设置为10。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> vec(10);
    
    std::generate(vec.begin(), vec.end(), [] { return 10; });
    
    for (const auto& v : vec) {
        std::cout << v << ' ';
    }
    std::cout << std::endl;
}

在这个例子中,我们定义了一个名为vec的vector,并将其所有元素构造为10。然后,我们迭代vector并将其打印在控制台上。在这个例子中,输出应该是一行10个整数,都为10。