컴퓨터

C++ 표준 라이브러리 자료구조 종류

안데스초콜릿 2024. 10. 21. 04:40

1. std::array

  • 설명: C++11에서 도입된 고정 크기 배열입니다. 크기가 컴파일 타임에 결정되며, 스택 메모리에 할당됩니다.
  • 특징:
    • 크기가 고정되어 있어 메모리 관리가 간단합니다.
    • STL 알고리즘과 호환됩니다.
    • 복사 및 대입이 용이합니다.
 
#include <array>
std::array<int, 5> myArray = {1, 2, 3, 4, 5};

2. std::vector

  • 설명: 동적 크기 배열로, 필요에 따라 크기를 조정할 수 있습니다. 메모리는 힙에 할당됩니다.
  • 특징:
    • 요소 추가 및 제거가 용이합니다 (push_back(), pop_back() 등).
    • 크기를 동적으로 변경할 수 있습니다.
    • STL 알고리즘과 호환됩니다.
 
#include <vector>
std::vector<int> myVector = {1, 2, 3};
myVector.push_back(4);

3. std::deque

  • 설명: 더블 엔디드 큐로, 양쪽 끝에서 요소를 추가하거나 제거할 수 있는 동적 배열입니다.
  • 특징:
    • 앞뒤로 요소를 추가하거나 제거하는 데 최적화되어 있습니다.
    • 메모리 재할당이 덜 발생하므로 성능이 좋습니다.
 
#include <deque>
std::deque<int> myDeque = {1, 2, 3};
myDeque.push_front(0);
myDeque.push_back(4);

4. std::list

  • 설명: 이중 연결 리스트로, 노드가 서로 연결되어 있는 형태입니다.
  • 특징:
    • 중간에 요소를 삽입하거나 제거하는 데 용이합니다.
    • 배열과 달리 메모리가 비연속적으로 할당되므로 임의 접근이 느립니다.
 
#include <list>
std::list<int> myList = {1, 2, 3};
myList.push_back(4);
myList.remove(2);

5. std::forward_list

  • 설명: 단일 연결 리스트로, 각 노드가 다음 노드에 대한 포인터만을 가집니다.
  • 특징:
    • 메모리 사용이 더 효율적이며, 삽입 및 삭제가 빠릅니다.
    • 반면, 역방향 탐색이 불가능합니다.
 
#include <forward_list>
std::forward_list<int> myForwardList = {1, 2, 3};
myForwardList.push_front(0);

6. std::vector<bool>

  • 설명: std::vector의 특수화로, boolean 값을 효율적으로 저장합니다.
  • 특징:
    • 비트 단위로 메모리를 사용하므로, 일반적인 std::vector보다 메모리 사용이 효율적입니다.
    • 그러나 임의 접근 성능이 떨어질 수 있습니다.
 
#include <vector>
std::vector<bool> myBoolVector = {true, false, true};

7. std::array_view (C++20에서 추가됨)

  • 설명: 배열에 대한 뷰를 제공하는 컨테이너로, 기존 배열이나 벡터의 서브배열을 쉽게 다룰 수 있습니다.
  • 특징:
    • 요소의 소유권을 가지지 않으며, 원본 배열의 변경이 반영됩니다.
    • 슬라이스, 서브배열 등의 작업을 간편하게 수행할 수 있습니다.
 
#include <array_view>
std::array<int, 5> myArray = {1, 2, 3, 4, 5};
std::array_view<int> view(myArray.data(), 3); // 첫 3개의 요소를 보기

8. std::span (C++20에서 추가됨)

  • 설명: 배열이나 연속적인 메모리 블록에 대한 뷰를 제공합니다. 임시 객체로 사용되며, 소유권을 가지지 않습니다.
  • 특징:
    • 비파괴적으로 배열의 슬라이스를 제공합니다.
    • 함수 매개변수로 배열을 쉽게 전달할 수 있습니다.
 
#include <span>
std::array<int, 5> myArray = {1, 2, 3, 4, 5};
std::span<int> mySpan(myArray.data(), 3); // 첫 3개의 요소에 대한 span

9. std::map, std::unordered_map

  • 설명: 키-값 쌍을 저장하는 연관 컨테이너입니다. 배열은 아니지만, 배열처럼 사용할 수 있습니다.
  • 특징:
    • std::map은 정렬된 키를 유지하며 이진 탐색 트리로 구현됩니다.
    • std::unordered_map은 해시 테이블로 구현되어 빠른 검색을 지원합니다.
#include <map>
#include <unordered_map>
std::map<std::string, int> myMap;
std::unordered_map<std::string, int> myUnorderedMap;

 

'컴퓨터' 카테고리의 다른 글

C++ 라이브러리 Armadillo  (1) 2024.10.22
C++ 표준 라이브러리 cmath  (0) 2024.10.22
C++ 라이브러리 추가 방법  (1) 2024.10.21
#include <unordered_map>  (0) 2024.10.21
지금 생각  (2) 2024.10.17