반응형
template <class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& val);
- first 채우고자 하는 iterator 시작위치 (first 포함된다.)
- last: 채우고자 하는 iterator 끝위치 (last 포함되지 않는다.)
- val: [first, last)까지 채우고자 하는 값
대입을 위해 operator= 연산자가 사용된다.
* 헤더파일 #include <algorithm> 필요
예제 코드
fill은 보통 배열(array)나 벡터(vector)에 주로 이용합니다.
예제- - Array
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
// 0 0 0 0 0
int arr[5] = {};
// 7 7 7 0 0
fill(arr, arr + 3, 7);
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
cout << endl;
}
예제- - Vector
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
// vector: 0 0 0 0 0 0 0 0
vector<int> vec(8);
// myvector: 0 7 7 7 0 0 0 0
fill(vec.begin() + 1, vec.begin() + 4, 7);
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
{
cout << ' ' << *it;
}
cout << '\n';
}
내부
template <class ForwardIterator, class T>
void fill(ForwardIterator first, ForwardIterator last, const T& val) {
while (first != last) {
*first = val;
++first;
}
}
예제 - 2차원 배열 채우기
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 4;
const int M = 10;
int arr[N][M] = { 0, };
void printArr()
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
puts("");
}
int main(void)
{
// ----------------------------------
// 전체 초기화; [0][0] ~ [최대 행 - 1][최대 열]
// ----------------------------------
fill(&arr[0][0], &arr[N - 1][M], 7);
printArr();
fill(&arr[0][0], &arr[N][0], 3); // [N][0] 이전까지 이므로 arr[N-1][M] 까지이다.
printArr();
fill(&arr[0][0], &(arr[0][0]) + N * M, 5);
printArr();
memset(arr, 0, sizeof(arr));
printArr();
// ----------------------------------
// 일부분 초기화 : [0][0] ~ [행 범위 지정][열 범위 지정]
// ----------------------------------
fill(&arr[0][0], &arr[0 + 2][0 + 3], 1);
printArr();
}
memset 함수와 차이는?
memset 은 1 Byte 단위로 값을 처리하기 때문에
「0」 이 아닌 숫자를 사용할 때, 예상치 않은 결과가 발생할 수 있다.
fill 은 byte 단위로 처리하는 것이 아니기 때문에 이를 처리할 수 있다.
「0」, 「false」 과 같은 값은 memset 으로도 처리하면 되지만
그 외의 값을 처리할 때 fill 을 활용하는 편이다.
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] sort() 함수란? (0) | 2022.01.01 |
---|---|
stable_sort()와 sort() 차이 알아보기 (0) | 2022.01.01 |
[C++] 로그(log) 함수 (0) | 2021.09.01 |
[C++] [STL] bitset (0) | 2021.08.01 |
[C++] [STL] Priority_queue (feat. 여러 기준으로 우선순위 큐 구현해보기) (0) | 2021.08.01 |
댓글