C++ 팁 – array를 간단히 비워 초기화하는 방법
C++11에는 일반 배열을 대체할 수 있는 가변 크기 컨테이너인 vector
와 더불어 고정 크기 컨테이너인 array
도 있다. 그리고 이 array
를 초기화하는 간단한 팁을 살펴본다.
컨테이너가 하는 일이 무언가를 담는 것이다 보니 필요에 따라 담고 비우는 일을 반복해야 할 수 있다. 일반적으로 vector
, map
, list
등에는 멤버 함수 clear
가 있어 한 번에 쉽게 비우며 초기화할 수 있다. 하지만 array
에는 멤버 함수에 clear
가 없다. 그럼 어떻게 비워야 할까. 가장 쉽게 생각해 볼 수 있는 건 다음처럼 루프를 사용하는 것이 아닐까 싶다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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개이니 다행이지만 엄청 많은 수라면 그리 좋은 선택이 아니며, 이 문제는 다음처럼 간단히 해결할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 |
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; } |