본문 바로가기
  • 공부, 여행 리뷰해요~~!!
공부/C++

C++, Vector Clear (내용 비우기)

by 하나리나 2022. 11. 3.
반응형

*개인공부를 위한 기록입니다. 잘못된 점에 대한 지적 감사드립니다.

 

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 세 개의 저장공간이 필요하므로 비효율적일 수 있겠습니다. 데이터 효율적으로 사용해야하는 곳에서는 다른 방안을 고안해야 할 것 같습니다.

반응형