배열 일괄 초기화 fill(), memset()
🔎 fill()
배열의 값을 일괄적으로 초기화할 때 사용하는 함수
일부값을 초기화하는 것도 가능하지만 보통은 전체를 초기화하는 것이 좋다
→ 보통 last를 (first + 배열 크기)로 지정하는데 일부만 초기화할 경우
앞에서 부터 순차적으로 초기화되므로 원하는 바와 다르게 초기화된다
ForwardIterator last에 마지막 주소가 아닌 다음 주소를 넣는다
void fill(ForwardIterator first, ForwardIterator last, const T& val);
사용 예시
#include <bits/stdc++.h>
using namespace std;
int d1[5];
int d2[3][3];
int main() {
//1차원 배열
fill(&d1[0], &d1[0] + 5, 1); //last에 &d1[5]도 상관없음
for (int i = 0; i < 5; i++){
cout << d1[i] << " "; }
cout << '\n';
//2차원 배열
fill(&d2[0][0], &d2[0][0] + 9, 2); //last에 &d2[2][3]도 상관없음
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << d2[i][j] << " ";
}
cout << '\n';
}
cout << '\n';
return 0;
}
출력 결과
1 1 1 1 1
2 2 2
2 2 2
2 2 2
시간복잡도
$O(n)$
🔎 memset()
바이트 단위로 초기화를 진행한다
0, -1, char형의 하나의 문자로 초기화 할 때 사용한다 → 이외의 숫자로 초기화 불가능
void * memset(void * ptr, int value, size_t num); //memset(배열의 이름, value, sizeof(배열))
사용 예시
#include <bits/stdc++.h>
using namespace std;
int d1[5];
int d2[3][3];
int main() {
//1차원 배열
memset(d1, -1, sizeof(d1));
for (int i = 0; i < 5; i++){
cout << d1[i] << " "; }
cout << '\n';
//2차원 배열
memset(d2, 0, sizeof(d2));
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << d2[i][j] << " ";
}
cout << '\n';
}
cout << '\n';
return 0;
}
출력 결과
-1 -1 -1 -1 -1
0 0 0
0 0 0
0 0 0
시간복잡도
$O(n)$
댓글남기기