C++ 算法 fill_n() 函數用於為從特定元素開始的範圍內指定數量的元素分配新值。
這意味著在 fill_n() 中,我們指定開始位置、要填充的元素數和要填充的值。
用法
template <class OutputIterator, class Size, class T>
void fill_n (OutputIterator first, Size n, const T& val); //until C++ 11
template <class OutputIterator, class Size, class T>
OutputIterator fill_n (OutputIterator first, Size n, const T& val); //since C++ 11
參數
first: 一個輸出迭代器,指向要分配值 val 的範圍中第一個元素的位置。
val:Value 用於填充範圍。
n:填充它的元素數量可以是有符號或無符號整數類型。
返回值
fill_n() 的第一個版本返回 none,fill_n() 的第二個版本返回一個迭代器,該迭代器指向要填充的最後一個元素之後的元素。
複雜度
複雜度在 n 中是線性的。並為每個元素分配一個值。
數據競爭
first 指向的範圍內的前 n 個對象被修改。
異常安全
如果元素賦值或迭代器上的操作引發異常,則此函數將引發異常。
請注意,無效參數會導致未定義的行為。
例子1
讓我們看一個簡單的例子來演示 fill_n() 的使用:
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;
int main() {
fill_n(ostream_iterator<int>(cout, ","), 10, 3);
return 0;
}
輸出:
3,3,3,3,3,3,3,3,3,3,
例子2
讓我們看另一個簡單的例子:
#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
using namespace std;
vector <int> v;
for ( auto i = 0 ; i < 9 ; ++i )
v.push_back( 0 );
cout << " vector v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the first 3 positions with a value of 1, saving position.
auto pos = fill_n( v.begin(), 3, 1 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the next 3 positions with a value of 2, using last position.
fill_n( pos, 3, 2 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
// Fill the last 3 positions with a value of 3, using relative math.
fill_n( v.end()-3, 3, 3 );
cout << "modified v = ( " ;
for ( const auto &w:v )
cout << w << " ";
cout << ")" << endl;
return 0;
}
輸出:
vector v = ( 0 0 0 0 0 0 0 0 0 ) modified v = ( 1 1 1 0 0 0 0 0 0 ) modified v = ( 1 1 1 2 2 2 0 0 0 ) modified v = ( 1 1 1 2 2 2 3 3 3 )
例子3
讓我們看另一個簡單的例子:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
vector<int> vect(8);
// calling fill to initialize first four values
// to 7
fill_n(vect.begin(), 3, 1);
for (int i=0; i<vect.size(); i++)
cout << ' ' << vect[i];
cout << '\n';
// calling fill to initialize 3 elements from
// "begin()+3" with value 4
fill_n(vect.begin() + 3, 3, 4);
for (int i=0; i<vect.size(); i++)
cout << ' ' << vect[i];
cout << '\n';
return 0;
}
輸出:
1 1 1 0 0 0 0 0 1 1 1 4 4 4 0 0
示例 4
讓我們看另一個簡單的例子:
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
vector <int> vec;
vector <int>::iterator Iter1;
int i;
for (i = 10; i <= 20; i++)
vec.push_back(i);
cout <<"Vector vec data:";
for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout <<*Iter1<<" ";
cout <<endl;
// fill the last 3 positions for 6 position with a value of 9
cout <<"\nOperation:fill_n(vec.begin() + 3, 6, 9)\n";
fill_n(vec.begin() + 3, 6, 9);
cout <<"Modified vec data:";
for (Iter1 = vec.begin(); Iter1 != vec.end(); Iter1++)
cout <<*Iter1<<" ";
cout <<endl;
return 0;
}
輸出:
Vector vec data:10 11 12 13 14 15 16 17 18 19 20 Operation:fill_n(vec.begin() + 3, 6, 9) Modified vec data:10 11 12 9 9 9 9 9 9 19 20
相關用法
- C++ Algorithm fill()用法及代碼示例
- C++ Algorithm remove_if()用法及代碼示例
- C++ Algorithm remove()用法及代碼示例
- C++ Algorithm max_element()用法及代碼示例
- C++ Algorithm set_union()用法及代碼示例
- C++ Algorithm next_permutation()用法及代碼示例
- C++ Algorithm upper_bound()用法及代碼示例
- C++ Algorithm minmax()用法及代碼示例
- C++ Algorithm remove_copy_if()用法及代碼示例
- C++ Algorithm random_shuffle()用法及代碼示例
- C++ Algorithm pop_heap()用法及代碼示例
- C++ Algorithm replace()用法及代碼示例
- C++ Algorithm set_intersection()用法及代碼示例
- C++ Algorithm lower_bound()用法及代碼示例
- C++ Algorithm transform()用法及代碼示例
- C++ Algorithm set_difference()用法及代碼示例
- C++ Algorithm is_sorted()用法及代碼示例
- C++ Algorithm equal_range()用法及代碼示例
- C++ Algorithm minmax_element()用法及代碼示例
- C++ Algorithm stable_sort()用法及代碼示例
注:本文由純淨天空篩選整理自 C++ Algorithm fill_n()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。