📜  C++中的std :: iota(1)

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

C++ 中的 std::iota

在 C++ 中,std::iota 是一个有用的 STL 算法,它可以按顺序生成一系列连续的值在指定的范围内,并将它们存储在指定的容器中。在这篇文章中,我们将介绍 std::iota 的详细用法并提供一些示例代码。

语法

std::iota 的语法如下:

template<class ForwardIt, class T>
void iota(ForwardIt first, ForwardIt last, T value);

它接受三个参数:

  1. first:表示范围的第一个元素的迭代器。
  2. last:表示范围的最后一个元素的迭代器。
  3. value:表示要生成的值的起始值。

请注意,value 必须是一个可转换为范围中元素类型的值。

示例

首先,考虑最简单的用法。假设我们有一个 vector,我们想用一系列的整数值填充它。我们可以使用 std::iota 来做到这一点。

#include <iostream>
#include <vector>
#include <numeric>

int main()
{
    std::vector<int> v(5);
    std::iota(v.begin(), v.end(), 1);

    for(auto i : v)
        std::cout << i << ' ';

    return 0;
}

这个程序将输出:

1 2 3 4 5

这里,我们创建了一个长度为 5 的 vector,并使用 std::iota 生成从 1 开始的一系列整数值并存储在 vector 中。最后,我们使用 for 循环遍历 vector 并打印每个元素的值。

接下来,我们考虑一个稍微复杂的例子。假设我们有一个数组,我们想将其所有元素赋为当前时间的秒数。然后我们可以使用 std::chrono 库中的函数获取当前时间的秒数,这样就不必手动输入这些值。

#include <iostream>
#include <algorithm>
#include <numeric>
#include <array>
#include <chrono>

int main()
{
    std::array<int, 5> arr;
    std::iota(arr.begin(), arr.end(), std::chrono::system_clock::now().time_since_epoch().count() % 60);

    for(auto i : arr)
        std::cout << i << ' ';

    return 0;
}

这个程序将输出:

5 6 7 8 9

这里,我们创建了一个数组,并使用 std::chrono::system_clock::now().time_since_epoch().count() % 60 获取当前时间的秒数,对 60 取模得到在一分钟内唯一的整数值,并将其用作 std::iota 的起始值。最后,我们使用 for 循环遍历数组并打印每个元素的值。

结论

std::iota 是一个方便的 C++ STL 算法,可以用来轻松生成有序整数序列并存储在关联的容器中。在这篇文章中,我们介绍了 std::iota 的基本使用方法并提供了一些示例代码。