📅  最后修改于: 2023-12-03 15:40:52.049000             🧑  作者: Mango
在软件开发和测试过程中,我们通常需要创建一些测试用例来验证我们的程序是否按照预期工作。为了减轻我们创建测试用例的工作量,C++标准库提供了两个函数 generate()
和 generate_n()
用于生成测试用例数据。
generate()
函数通过使用给定的生成器函数,逐个将值赋给迭代器区间 [first, last) 中的元素,从而将元素生成为一系列测试用例。
函数原型如下:
template< class ForwardIt, class Generator >
void generate( ForwardIt first, ForwardIt last, Generator g );
其中:
first
:指向要填充的第一个元素的迭代器。last
:指向最后一个要填充的元素的下一个元素的迭代器。g
:生成器函数。每次调用时,它将生成一个新元素。下面是一个使用 generate()
生成测试用例的例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v(5);
std::generate(v.begin(), v.end(), []{ return rand() % 100; });
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
输出结果:
30 1 79 44 19
在上面的例子中,我们使用了 generate()
函数来生成一个包含5个整数的 vector
测试用例。生成器函数可以是Lambda表达式,也可以是任何可以生成新元素的可调用对象。
generate_n()
函数用于在给定的区间中生成一定数量的测试用例。
函数原型如下:
template<class OutputIt, class Size, class Generator>
OutputIt generate_n(OutputIt first, Size count, Generator g);
其中:
first
:指向要填充的第一个元素的迭代器。count
:要生成的测试用例数量。g
:生成器函数。每次调用时,它将生成一个新元素。下面是一个使用 generate_n()
生成测试用例的例子:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v(5);
std::generate_n(v.begin(), 5, []{ return rand() % 100; });
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
输出结果:
88 75 52 76 60
在上面的例子中,我们使用了 generate_n()
函数来生成一个包含5个整数的 vector
测试用例。与 generate()
函数不同的是,您需要手动指定要生成的测试用例数量。
generate()
和 generate_n()
函数是非常有用的函数,它们可以生成测试用例数据以测试和验证我们的程序。无论是生成一定数量的测试用例还是生成迭代器范围内的测试用例,这两个函数都非常方便。