공부/C++
C++, Vector Clear (내용 비우기)
하나리나
2022. 11. 3. 22:23
반응형
*개인공부를 위한 기록입니다. 잘못된 점에 대한 지적 감사드립니다.
Vector의 내용 비우는 방법: Clear
다음과 같이 사용하시면 됩니다.
std::vector<int> A = {1,2,3};
A.clear();
std::vector<int> A;
A.push_back(1);
A.push_back(10);
printf("Size of A: %ld \n", A.size()); // 2
A.clear();
printf("Size of A: %ld \n",A.size()); // 0
// 참고. ld: long unsigned int 출력
아래는 토이 프로젝트 진행 시 vector - clear 가 필요했던 경우를 예로 든 것입니다.
가령, 다음과 같은 함수가 있다고 하겠습니다.
std::vector<int> a;
void Func1(std::string fp); // File의 measurements를 읽으며 a에 저장 (vector에 push)
또 다른 File을 읽어서 vector a의 형태로 저장해야 하는 요구사항이 생겼습니다.
Func1의 input이 File이므로 다음과 같은 상황에선 문제가 발생합니다.
Func1(File1);
Func1(File2);
왜냐하면, Func1 실행 하면 File1의 measurements가 a에 저장되고, 곧바로 Func2 실행하면 a 에 연달아 File2의 measurements가 push됩니다.
이를 방지 하기 위하여 여러 방안을 고안할 수 있습니다.
1) a를 사용하기 위한 local 변수 설정
2) Func1 함수의 반환값 설정
3) push하는 지점을 파악하여 데이터 사용
등등
저는 간단하게 1)의 방법을 다음과 같이 사용하였습니다.
Func1(File1);
std::vector<int> x = a;
a.clear();
Func1(File2);
std::vector<int> y = a;
Func1 변경이나 push 지점 파악 없이 간단하게 File1, File2의 데이터를 저장하게 되었습니다.
단점으로는, 데이터 양이 많아질수록 x,y,a 세 개의 저장공간이 필요하므로 비효율적일 수 있겠습니다. 데이터 효율적으로 사용해야하는 곳에서는 다른 방안을 고안해야 할 것 같습니다.
반응형