[C++] STL 벡터(Vector)

Date:     Updated:

카테고리:

태그:

이 글은 C++ STL 벡터(Vector)를 공부하고 정리한 글입니다

벡터

  • 어떤 자료형도 넣을 수 있는 동적 배열
    • 기본 데이터
    • 클래스
    • 포인터
  • 그 안에 저장된 모든 요소들이 연속된 메모리 공간에 위치
  • 요소 수가 증가함에 따라 자동으로 메모리를 관리해 줌
  • 어떤 요소에도 임의로 접근 가능

    변수 생성

    std::vector<int> scores;              // 빈 벡터 만들기
      
    scores.push_back(1);
    scores.push_back(2);
    
    std::vector<int> scores1(scores);     // 벡터 사본 만들기
    
    std::vector<int> prices(10);          // 10개의 int 데이터를 가지고 있는 벡터를 만든다(모든 요소의 값은 0)
    

    push_back()

    • vector의 맨 뒤에 요소를 추가한다
    scores.push_back(30);
    
    names.push_back("Coco");
    

    pop_back()

    • vector의 맨 뒤에 있는 요소를 제거한다
    scores.pop_back();
    

    capacity()

    • vector에 할당된 요소 공간 수
    scores.capacity();
    

    size()

    • vector에 실제로 들어 있는 요소 수
    scores.size();
    

    reserve()

    • vector의 용량을 늘린다
    • 용량이 증가해야 하면 새로운 저장 공간을 재할당하고 기존 요소들을 모두 새 공간을 복사
    • 불필요한 재할당을 막기 위해 vector를 생성한 직후에 이 함수를 호출하자
    scores.reserve(10);
    

    operator[]

    • 지정된 위치의 요소를 참조로 반환한다
    scores[i] = 3;
    
    std::cout << names[i] << " ";
    
    std::cout << myCats[i].GetScore() << " ";
    

    resize()

    • vector의 크기를 바꿔준다
    • 만약 바꿀 크기가 기존 용량보다 크다면 재할당하며 해당 크기까지 요소를 추가해준다(기본값은 0)
    • 만약 바꿀 크기가 기존 용량보다 적다면 크기만 남기고 나머지는 버린다
    scores.push_back(10);     // 10
    scores.push_back(20);     // 10, 20
    
    scores.resize(4);         // 10, 20, 0, 0
    scores.resize(6, 2);      // 10, 20, 0, 0, 2, 2
    scores.resize(3);         // 10, 20, 0
    

    begin()

    • vector의 첫 번째 요소를 가리키는 반복자를 반환
    vector<int>::iterator bIter = scores.begin();
    

    end()

    • vector의 마지막 요소 바로 뒤의 요소를 가리키는 반복자를 반환
    vector<int>::iterator eIter = scores.end();
    

    rbegin()

    • vector의 마지막 요소를 가리키는 역방향 반복자를 반환
    vector<int>::reverse_iterator reversedBeginIt = scores.rbegin();
    

    rend()

    • vector의 첫 번째 요소 바로 앞의 요소를 가리키는 역방향 반복자를 반환
    vector<int>::reverse_iterator reversedEndIt = scores.rend();
    

    insert()

    • vector의 특정 위치에 요소를 삽입한다
    // scores : 10 20 30 40 50
    vector<int>::iterator it = scores.begin();
    ++it;
    
    it = scores.insert(it, 35);       // 10 35 20 30 40 50
    

    assign()

    • vector의 모든 요소를 버리고 새로운 요소로 채운다
    // scores : 10 20
    scores.assign(5, 30);     // 30 30 30 30 30
    

    swap()

    • 같은 자료형의 두 벡터를 맞바꾼다
    vector<int> scores;           // 10 20 30 100
    vector<int> anotherScores;    // 40 50 60
    
    scores.swap(anotherScores);   // socres : 40 50 60
                                  // anotherScores : 10 20 30 100
    

    clear()

    • vector를 싹 지운다
    • 크기(size)는 0이 되고 용량(capacity)은 변하지 않음
    scores.clear();
    

벡터의 장점

  • 순서와 상관 없이 요소에 임의적으로 접근 가능
  • 제일 마지막 위치에 요소를 빠르게 삽입 및 삭제

벡터의 단점

  • 중간에 요소 삽입 및 삭제는 느림
  • 재할당 및 요소 복사에 드는 비용


참조

포큐아카데미 C++ 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기