test-case가 주어지는 문제를 풀 때 가끔씩 전역변수로 선언된 vector을 케이스마다 새롭게 사용해야 하는 경우가 있다.
#include<bits/stdc++.h>
vector<int> a(20001);
...
int main(){
...
int t;
cin>>t;
while(t--){
...
for(int i=0; i<n; i++){
cin>>a[i];
}
...
}
...
}
위의 경우와 같이 전역변수 vector<int> a에 test-case마다 새로 값을 입력받아야 할 때에는,
test-case가 끝날 때 마다 전역변수 a의 값들을 초기화해주어야 한다.
이럴 때 자주 사용하는것은
a.clear()
이것일 것이다.
하지만
codingdog.tistory.com/entry/c-vector-clear-size를-0으로-만들어-준다
이 블로그의 글에 따르면 완벽하게 초기화 되지 않는다.
이것을 보완하여 완벽한 초기화를 하기 위해서
swap trick을 사용해주면 된다. 위의 예시를 활용해보자면
#include<bits/stdc++.h>
vector<int> a(20001);
...
int main(){
...
int t;
cin>>t;
while(t--){
...
for(int i=0; i<n; i++){
cin>>a[i];
}
...
vector<int>(20001).swap(a);
}
...
}
만약 이차원 vector라도 동일하게 사용해주면 된다.
#include<bits/stdc++.h>
vector< vector<int> > a(20001);
...
int main(){
...
int t;
cin>>t;
while(t--){
...
for(int i=0; i<n; i++){
cin>>a[i];
}
...
}
...
vector< vector<int> >(20001).swap(a);
}
'프로그래밍 > 나의 디버깅 노트' 카테고리의 다른 글
[ps][c++] 문자열 다루기 (0) | 2021.05.30 |
---|---|
[ps][c++] cin을 사용하다가 scanf("%1d")를 사용해야 할 때 (0) | 2021.05.04 |
[ps][c++] 지역변수에 의한 segmentation fault (0) | 2021.04.28 |
[C++] 배열을 초기화할 때 할 수 있는 실수 (0) | 2021.03.12 |
[Visual Studio] 파일 소스를 열 수 없습니다. 오류 해결하기 (1) | 2020.04.19 |