std::fill_n
#include <algorithm>
template <class OutputIterator, class Size, class T>
OutputIterator fill_n (OutputIterator first, Size n, const T& val);
Gán một giá trị cho n phần tử liên tiếp, bắt đầu từ một vị trí được chỉ định.
Tham số
first
- Output Iterator trỏ đến phần tử đầu tiên trong phạm vi nơi sẽ bắt đầu gán giá trị.
n
- Số lượng phần tử cần được gán giá trị.
val
- Giá trị cần gán cho các phần tử.
Giá trị trả về
- Output Iterator trỏ đến phần tử ngay sau phần tử cuối cùng được gán giá trị.
Đặc điểm
n
phải là số nguyên không âm. Nếun
lớn hơn kích thước của container (tính từfirst
),fill_n()
có thể ghi ra ngoài phạm vi của container, dẫn đến hành vi không xác định.fill_n()
ghi đè giá trị hiện tại của các phần tử.fill_n()
trả về iterator trỏ đến sau phần tử cuối cùng được gán giá trị.fill_n()
yêu cầu OutputIterator ở tham sốfirst
, cho phép ghi giá trị mới lên các phần tử mà nó trỏ đến.fill_n()
thường được sử dụng khi:- Bạn muốn khởi tạo một số lượng phần tử nhất định trong container với cùng một giá trị.
- Bạn muốn ghi đè lên một phần cụ thể của container bằng một giá trị, không cần quan tâm đến kích thước thực tế của container.
- Bạn muốn chèn
n
phần tử có giá trị giống nhau vào container, sử dụng các OutputIterator đặc biệt như std::back_inserter.
Phân biệt với fill_n()
fill()
gán giá trị cho tất cả các phần tử trong phạm vi được chỉ định bởifirst
vàlast
.fill_n()
gán giá trị chon
phần tử, bắt đầu từfirst
, không cầnlast
.
Ví dụ
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<int> numbers(10); // Vector 10 phần tử, giá trị mặc định
// Gán giá trị 7 cho 5 phần tử đầu tiên
std::fill_n(numbers.begin(), 5, 7);
std::cout << "numbers after fill_n: ";
for (int x : numbers) {
std::cout << x << " ";
}
std::cout << std::endl;
char buffer[20] = {0}; // Mảng 20 ký tự, khởi tạo bằng 0
// Gán ký tự 'A' cho 8 phần tử, bắt đầu từ phần tử thứ 3
std::fill_n(buffer + 2, 8, 'A');
std::cout << "buffer after fill_n: ";
for (int i = 0; i < 20; i++) {
std::cout << buffer[i] << " ";
}
std::cout << std::endl;
std::vector<int> values;
// Thêm 4 số 9 vào cuối vector values
std::fill_n(std::back_inserter(values), 4, 9);
std::cout << "values after fill_n with back_inserter: ";
for (int x : values) {
std::cout << x << " ";
}
std::cout << std::endl;
return 0;
}
Các hàm liên quan
fill | Gán một giá trị cho tất cả các phần tử trong một phạm vi (range) được chỉ định |
generate_n | Gán các giá trị được sinh ra bởi một hàm (hoặc đối tượng hàm) cho n phần tử liên tiếp, bắt đầu từ một vị trí được chỉ định |
replace | Thay thế tất cả các lần xuất hiện của một giá trị cũ bằng một giá trị mới trong một phạm vi (range) |
for_each | Áp dụng một hàm (hoặc đối tượng hàm) cho mỗi phần tử trong một phạm vi được chỉ định |