天天看點

關于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;
}

           

代碼輸出:

關于 itoa函數 和 _itoa函數 的介紹

iota()函數和itoa()函數很像,要注意區分。itoa()函數是用來将一個int類型轉換為C字元串類型的函數。名稱可以了解為 i - to - a 。而且可以根據參數的不同,将int類型轉換為不同的進制,并儲存在相應的字元數組中。

注意,最新的C++編譯器已經将itoa()函數廢棄,而使用_itoa()函數來代替。如果我們使用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
           

謝謝閱讀

繼續閱讀