반응형

Modern C++ 컨테이너(container) 초기화

  • Modern C++에서 표준 라이브러리 컨테이너는 다양한 초기화 방법을 제공합니다.
  • 컨테이너의 적절한 초기화 방식은 코드의 가독성과 성능 최적화에 중요한 역할을 합니다.
  • 이번 글에서는 C++의 모든 주요 컨테이너를 효과적으로 초기화하는 방법을 예제 코드와 함께 살펴보겠습니다.


  • cpp

      #include <iostream>
      #include <vector>
      #include <array>
      #include <list>
      #include <deque>
      #include <forward_list>
      #include <set>
      #include <unordered_set>
      #include <map>
      #include <unordered_map>
      #include <algorithm>
      
      int main() {
          // 1. std::vector
          std::vector<int> vec1 = {1, 2, 3, 4, 5};  // 리스트 초기화
          std::vector<int> vec2(5, 10);             // 크기 5, 모든 원소를 10으로 초기화
          std::vector<int> vec3(vec1.begin(), vec1.end()); // 다른 컨테이너로부터 초기화
      
          // 2. std::array (고정 크기 배열)
          std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
          std::array<int, 5> arr2{10, 20, 30, 40, 50};  // 동일한 효과
      
          // 3. std::list (이중 연결 리스트)
          std::list<int> lst1 = {1, 2, 3, 4, 5};
          std::list<int> lst2(5, 100);  // 크기 5, 모든 원소를 100으로 초기화
          std::list<int> lst3(vec1.begin(), vec1.end()); // 다른 컨테이너로부터 초기화
      
          // 4. std::deque (양방향 큐)
          std::deque<int> deq1 = {1, 2, 3, 4, 5};
          std::deque<int> deq2(4, 200);  // 크기 4, 모든 원소를 200으로 초기화
          std::deque<int> deq3(lst1.begin(), lst1.end()); // 다른 컨테이너로부터 초기화
      
          // 5. std::forward_list (단일 연결 리스트)
          std::forward_list<int> flst1 = {1, 2, 3, 4, 5};
          std::forward_list<int> flst2(flst1.begin(), flst1.end()); // 다른 컨테이너로부터 초기화
      
          // 6. std::set (중복 없는 정렬된 집합)
          std::set<int> set1 = {5, 1, 4, 2, 3};  // 자동 정렬됨
          std::set<int> set2(set1.begin(), set1.end()); // 다른 컨테이너로부터 초기화
      
          // 7. std::unordered_set (중복 없는 비정렬 집합)
          std::unordered_set<int> uset1 = {5, 1, 4, 2, 3};
          std::unordered_set<int> uset2(uset1.begin(), uset1.end()); // 다른 컨테이너로부터 초기화
      
          // 8. std::map (정렬된 key-value 쌍)
          std::map<int, std::string> map1 = {{1, "one"}, {2, "two"}, {3, "three"}};
          std::map<int, std::string> map2(map1.begin(), map1.end()); // 다른 컨테이너로부터 초기화
      
          // 9. std::unordered_map (비정렬 key-value 쌍)
          std::unordered_map<int, std::string> umap1 = {{1, "apple"}, {2, "banana"}, {3, "cherry"}};
          std::unordered_map<int, std::string> umap2(umap1.begin(), umap1.end()); // 다른 컨테이너로부터 초기화
      
          // 10. std::multiset (중복 허용 집합)
          std::multiset<int> mset1 = {1, 2, 2, 3, 3, 3};
          std::multiset<int> mset2(mset1.begin(), mset1.end()); // 다른 컨테이너로부터 초기화
      
          // 11. std::multimap (중복 허용 key-value 쌍)
          std::multimap<int, std::string> mmap1 = {{1, "one"}, {1, "uno"}, {2, "two"}};
          std::multimap<int, std::string> mmap2(mmap1.begin(), mmap1.end()); // 다른 컨테이너로부터 초기화
      
          // 출력 예제
          std::cout << "vector: ";
          for (int v : vec1) std::cout << v << " ";
          std::cout << "\nset: ";
          for (int s : set1) std::cout << s << " ";
          std::cout << "\nmap: ";
          for (const auto& [k, v] : map1) std::cout << "{" << k << ", " << v << "} ";
          std::cout << std::endl;
      
          return 0;
      }
    


정리

  • 위 코드를 통해 C++의 다양한 컨테이너를 초기화하는 방법을 확인할 수 있었습니다.
  • 각 컨테이너는 목적과 특징이 다르므로, 필요에 맞는 컨테이너를 선택하여 사용하면 됩니다.
  • 초기화 방식에 따라 성능과 사용성이 달라질 수 있으니, 코드 작성 시 신중하게 선택하시길 바랍니다! 🚀



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts