vector

sz L·2023년 4월 8일
0

C++

목록 보기
35/40
post-thumbnail

vector container

자동으로 메모리가 할당되는 배열이라고 생각하면 됨
(자료구조 스택과 비슷)

template를 사용하기 때문에 데이터 타입은 마음대로 넣을 수 있다
맨 뒤에서 삭제/삽입이 이뤄짐
중간에 값 삽입/삭제도 가능,,,하지만 배열기반이기 때문에 비효율적


벡터의 사용

  • 헤더파일 사용
  • using namespace std; 사용하면 편리함
  • 벡터의 선언은 vector<[data type]> [변수이름]
    • vector <int> v;

벡터의 생성자와 연산자

  • vector v;
    • 비어있는 벡터v 생성
  • vector v(5);
    • 기본값(0)으로 초기화 된 5개의 원소를 가지는 vector v 생성
  • vector v(5,2);
    • 2로 초기화 된 5개의 원소를 가지는 vector v 생성
  • vector v2(v1);
    • v2는 v2 vector를 복사해서 생성

벡터의 멤버 함수

  • v.assign(5,2);
    • 2의 값으로 5개의 원소 할단
  • v.at(idx);
    • idx번째 원소를 참조(return)
    • v[idx]보다 속도는 느리지만, 범위를 점검하므로 안전함
  • v[idx];
    • idx번째 원소를 참조
    • 범위를 점검하지 않으므로 속도가 v.at(idx); 보다 빠름
  • v.front();
    • 첫번째 원소를 참조
  • v.back();
    • 마지막 원소를 참조
  • v.clear();
    • 모든 원소를 제거
    • 원소만 제거하고 메모리는 남아있다
    • size만 줄어들고 capacity는 그래로 남아있음
  • v.push_back(7);
    • 마지막 원소 뒤에 원소 7을 삽입
  • v.pop_back();
    -마지막 원소 제거
  • v.begin();
    • 첫번째 원소 가리킴(iterator와 사용)
  • v.end();
    • 마지막의 "다음"을 가리킴(iterator와 사용)
  • v.rbegin();
    • reverse begin을 가리킨다 (거꾸로 해서 첫번째 원소를 가리킵니다)
    • iterator와 사용.
  • v.rend();
    • reverse end 을 가리킨다 (거꾸로 해서 마지막의 다음을 가리킵니다)
    • iterator와 사용.
  • v.reserve(n);
    • n개의 원소를 저장할 위치를 예약합니다(미리 동적할당 해놉니다)
  • v.resize(n);
    • 크기를 n으로 변경한다.
    • 더 커졌을 경우 default값인 0으로 초기화 한다.
  • v.resize(n,3);
    • 크기를 n으로 변경한다.
    • 더 커졌을 경우 인자의 값을 3으로 초기화한다.
  • v.size();
    • 원소의 갯수를 리턴한다.
  • v.capacity();
    • 할당된 공간의 크기를 리턴한다.
    • 공간 할당의 기준은 점점 커지면서로 capacity를 할당하게 됩니다.
  • v2.swap(v1);
    • v1과 v2의 원소와 capacity 바꿔줍니다. (모든걸 스왑해줌)
    • v1의 capacity를 없앨때 (할당한 메모리를 프로그램이 끝나기 전에 없애고 싶을때) 사용하기도 합니다.
    • v2를 capacity가 0인 임시 객체로 만들어서 스왑을 해줍니다.
    • vector().swap(v1);
  • v.insert(2, 3, 4);
    • 2번째 위치에 3개의 4값을 삽입합니다. (뒤엣놈들은 뒤로 밀림)
  • v.insert(2, 3);
    • 2번째 위치에 3의 값을 삽입합니다.
    • 삽입한 곳의 iterator를 반환합니다.
  • v.erase(iter);
    • iter 가 가리키는 원소를 제거합니다.
    • size만 줄어들고 capacity(할당된 메모리)는 그대로 남습니다.
    • erase는 파라미터 하나를 받을때와 두개를 받을 때 다릅니다.
    • 그에 따른 예제는 여기있습니다.
  • v.empty()
    • vector가 비었으면 리턴 true
    • 비어있다의 기준은 size가 0이라는 것이지, capacity와는 상관이없습니다.

vector의 size와 capacity의 관계

  • v.size();
    • 원소의 개수 리턴
  • v.capacity();
    • 할당된 공간의 크기를 리턴

벡터의 멤버 형식

  • iterator : 반복자 형식
  • reverse_iterator : 역 반복자 형식
  • value_type : 원소의 형식
  • size_type : 원소의 개수의 형식
profile
가랑비는 맞는다 하지만 폭풍은 내 것이야

0개의 댓글