关于STL中iota()函数的使用

关于iota函数的介绍

iota()函数用于对STL中具有前向迭代器的容器进行一定范围内的批量递增赋值,简单来说就是可以对一个容器进行值的初始化,而且其中的值是递增的,递增的初始值由第三个参数决定。

当我们需要将一个容器的值进行递增初始化的时候,我们可以使用这个函数进行初始化,而不用自己实现。

iota()函数声明实现于头文件 numeric

关于iota的实现如下:

template <class ForwardIterator, class T>
  void iota (ForwardIterator first, ForwardIterator last, T val)
{
  while (first!=last) {
    *first = val;
    ++first;
    ++val;
  }
}

关于iota()函数的使用如下,即对一个容器进行值的初始化:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;

int main() {
	vector<int> p(10, 0);
	// iota: 对vector内的元素进行批量递增复制,初始值为第三个参数
	iota(p.begin(), p.end(), 100);
	for (auto& i : p) {
		cout << i << " ";
	}
	return 0;
}

代码输出:

100 101 102 103 104 105 106 107 108 109

关于 itoa函数 和 _itoa函数 的介绍

iota()函数和itoa()函数很像,要注意区分。itoa()函数是用来将一个int类型转换为C字符串类型的函数。名称可以理解为 i - to - a 。而且可以根据参数的不同,将int类型转换为不同的进制,并保存在相应的字符数组中。

注意,最新的C++编译器已经将itoa()函数废弃,而使用_itoa()函数来代替。如果我们使用itoa()函数,可能会看到如下报错:

'itoa': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _itoa. 

说明itoa()已经被POSIX标准废弃,而使用_itoa来进行替换。

这一点要注意。

以下是_itoa()函数的代码测试:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i;
    char buffer[33];
    printf("Enter a number: ");
    scanf("%d", &i);
    _itoa(i, buffer, 10);	// int类型转换为C字符串,10进制
    printf("decimal: %s\n", buffer);
    _itoa(i, buffer, 16);	// int类型转换为C字符串,16进制
    printf("hexadecimal: %s\n", buffer);
    _itoa(i, buffer, 2);	// int类型转换为C字符串,2进制
    printf("binary: %s\n", buffer);
    return 0;
}

代码输出:

Enter a number: 100
decimal: 100
hexadecimal: 64
binary: 1100100

谢谢阅读

上一篇:go基础语法笔记


下一篇:常量和iota