반응형
fill() & memset()
fill()
배열을 0 이외의 값으로 초기화 시 사용
- 배열
fill(초기화 시키고 싶은 시작주소, 끝주소, 초기화 값)
헤더
#include <algorithm>
vector
벡터는 맨처음 초기화 하지 않고 실행시 오류가 뜬다. 왜냐하면 동적배열이기 때문에 초반에 어떤 크기인지 알 수 없기 떄문이다. 따라서 문제에서 주어진 값을 먼저 넣고 초기화 할 때 사용하는 것이 좋음1차원
using namespace std; const int max_n =8; vector<int> v; int main() { //1차원 벡터 for (int i = 0; i < max_n; i++) { v.push_back(i); } for (auto ele : v) { cout << ele << ' '; } cout << '\n'; fill(v.begin(), v.end(), 10); for (auto ele : v) { cout << ele << ' '; } cout << '\n'; } //출력 0 1 2 3 4 5 6 7 10 10 10 10 10 10 10 10
2차원
2차원 벡터는 vector<vector
using namespace std;
const int max_n =8;
vector<int> v;
vector<vector<int>> vv;
int main() {
//1차원 벡터
for (int i = 0; i < max_n; i++) {
v.push_back(i);
}
//2차원벡터
for (int i = 0; i < max_n; i++) {
vv.push_back(v);
}
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
cout << vv[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
for (int i = 0; i < max_n; i++) {
fill(&vv[i][0], &vv[i][0] + max_n, 5);
}
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
cout << vv[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
}
//출력
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
0 1 2 3 4 5 6 7
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
5 5 5 5 5 5 5 5
배열(1차원,2차원)
배열은 vector와 다르게 값이 없어도 max_n으로 크기가 정해져 있기 때문에 바로 fill사용 가능 , 2차원의 경우 시작주소와,끝주소를 통해 초기화가 가능
using namespace std;
const int max_n =8;
int a[max_n];
int aa[max_n][max_n];
//fill()을 이용해서 0이외의 값으로 초기화
int main() {
fill(a, a + max_n, 10);
for (int i = 0; i < max_n; i++) {
cout << a[i] << ' ';
}
cout << '\n';
cout << '\n';
fill(&aa[0][0], &aa[0][0] + max_n * max_n, 20);
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
cout << aa[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
return 0;
}
//출력
10 10 10 10 10 10 10 10
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 20
memset()
배열 전체를 0으로 초기화 시 많이 사용
- 배열의 크기는 보통 sizeof(배열)
memset(배열이름,초기화 값, 배열크기)
헤더
#include<cstring>
배열(1차원)
using namespace std;
const int max_n =8;
int a[max_n];
int aa[max_n][max_n];
//fill()을 이용해서 0이외의 값으로 초기화
int main() {
for (int i = 0; i < max_n; i++) {
a[i] = i;
}
for (auto ele : a) {
cout << ele << ' ';
}
cout << '\n';
cout << '\n';
memset(a, 0, sizeof(a));
for (auto ele : a) {
cout << ele << ' ';
}
cout << '\n';
return 0;
}
//출력
0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0
배열(2차원)
using namespace std;
const int max_n =8;
int a[max_n];
int aa[max_n][max_n];
//fill()을 이용해서 0이외의 값으로 초기화
int main() {
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
aa[i][j] = i + j+10;
}
}
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
cout << aa[i][j] << ' ';
}
cout << '\n';
}
cout << '\n';
memset(aa, 0, sizeof(aa));
for (int i = 0; i < max_n; i++) {
for (int j = 0; j < max_n; j++) {
cout << aa[i][j] << ' ';
}
cout << '\n';
}
return 0;
}
//출력
10 11 12 13 14 15 16 17
11 12 13 14 15 16 17 18
12 13 14 15 16 17 18 19
13 14 15 16 17 18 19 20
14 15 16 17 18 19 20 21
15 16 17 18 19 20 21 22
16 17 18 19 20 21 22 23
17 18 19 20 21 22 23 24
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
vector
일반적으로 memset은 배열을 바이트단위로 초기화 하며 0,-1,char형의 하나의 문자로 초기화 할 때만 사용
1이나 다른 수로는 초기화를 할 수 없음
반응형
'Language > C++' 카테고리의 다른 글
(C++)조합 (0) | 2023.02.22 |
---|---|
(C++)순열 (0) | 2023.02.21 |
(C++)배열의 최댓값,최솟값-max_element,min_element (0) | 2023.02.20 |
(C++)문자열 관련 함수(substr,find,atoi,to_string,size,getline..) (0) | 2023.01.10 |
(C++)vector(동적배열) 정리 및 사용법 (0) | 2023.01.10 |