배열과 리스트 그리고 벡터

김동현·2023년 7월 13일
0

코딩테스트

목록 보기
2/12

배열

배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조이다.
배열의 값은 인덱스를 통해 참조할 수 있으며, 선언한 자료형의 값만 저장할 수 있다.

배열의 특징

  • 인덱스를 사용하여 값에 바로 접근할 수 있다.
  • 새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다.
    만약 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다.
  • 배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다.

리스트

리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조이다.

리스트의 특징

  • 인덱스가 없으므로 값에 접근하려면 Head 포인터부터 순서대로 접근해야 한다.
  • 포인터로 연결되어 있으므로 데이터를 삽입하거나 삭제하는 연산 속도가 빠르다
  • 선언할 때 크기를 별도로 지정하지 않아도 된다.
    다시 말해 릿트의 크기는 정해져 있지 않으며, 크기가 변하기 쉬운 데이터를 다룰 때 적절하다.
  • 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡하다.

벡터

vector는 C++ 표준 라이브러리에 있는 자료구조 컨테이너 중 하나로, 사용자가 손쉽게 사용하기 위해 정의된 클래스이다.
기존의 배열과 같은 특징을 가지면서 배열의 단점을 보완한 동적 배열의 형태라고 생각하면 된다.

벡터의 특징

  • 동적으로 원소를 추가할 수 있다.
  • 맨 마지막 위치에 데이터를 삽입하거나 삭제할 때는 문제가 없지만 중간 데이터의 삽입 삭제는 배열과 같은 메너니즘으로 동작한다.
// 선언
vector<int> A;

// 생성
vector<int> first;				// 빈 벡터
vector<int> second(4, 100);	// 100이 4개인 벡터
vector<int> third(second.begin(), second.end()); // second 탐색해서 카피
vector<int> fourth(third);		// third의 카피

// 배열로부터 생성
int myints[] = {16,2,77,29};
vector<int> fifth(myints, myints + sizeof(myints) / sizeof(int) );
  
// 삽입 연산
A.push_back(1);                 // 마지막에 1 추가
A.insert(A.begin(), 7);         // 맨 앞에 7을 삽입
A.insert(A.begin() + 2, 10);    // 인덱스 2위치에 10 삽입

// 값 변경
A[4] = -5;

// 삭제 연산
A.pop_back();                   // 마지막 값 삭제
A.erase(A.begin() + 3);         // 인덱스 3에 해당하는 값 삭제
A.claer();                      // 모든 값 삭제

// 정보 가져오기
A.size();                       // 데이터 개수
A.front();                      // 처음 값
A.back();                       // 마지막 값
A[3];                           // 인덱스 3에 해당하는 값
A.at(5);                        // 인덱스 5에 해당하는 값
A.begin();                      // 첫 번째 데이터 위치
A.end();                        // 마지막 데이터 다음 위치
profile
프론트에_가까운_풀스택_개발자

0개의 댓글