C++ 팁 – array를 간단히 비워 초기화하는 방법

C++11에는 일반 배열을 대체할 수 있는 가변 크기 컨테이너인 vector와 더불어 고정 크기 컨테이너인 array도 있다. 그리고 이 array를 초기화하는 간단한 팁을 살펴본다.

컨테이너가 하는 일이 무언가를 담는 것이다 보니 필요에 따라 담고 비우는 일을 반복해야 할 수 있다. 일반적으로 vector, map, list 등에는 멤버 함수 clear가 있어 한 번에 쉽게 비우며 초기화할 수 있다. 하지만 array에는 멤버 함수에 clear가 없다. 그럼 어떻게 비워야 할까. 가장 쉽게 생각해 볼 수 있는 건 다음처럼 루프를 사용하는 것이 아닐까 싶다.


struct Foo {
  int i;
  std::string str;
};

int _tmain(int argc, _TCHAR* argv[])
{
  std::array<Foo, 2> arr = {10, "abc", 20, "efg"};

  for (auto& a : arr) {
    a = {0, ""};
  }

  return 0;
}

이 예는 요소가 2개이니 다행이지만 엄청 많은 수라면 그리 좋은 선택이 아니며, 이 문제는 다음처럼 간단히 해결할 수 있다.


struct Foo {
  int i;
  std::string str;
};

int _tmain(int argc, _TCHAR* argv[])
{
  std::array<Foo, 2> arr = {10, "abc", 20, "efg"};

  arr.fill({});
  return 0;
}

You may also like...

  • RammerChoi

    오 재미있는 코드네요. 감사합니다 🙂

  • HongJinBom

    ^^