리스트
리스트
리스트는 주로 연속된 일관적인 자료들을 순서대로 저장할 때 용이하다. 리스트는 주로 배열과 벡터를 사용하여 구현할 수 있다.
1. 배열 ★
배열은 프로그래밍을 시작한 뒤 얼마 지나지 않아 접하게 된다.
배열은 아래와 같은 그림으로 생각하면 된다.
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | … |
배열은 처음 인덱스가 0으로 시작한다. C/C++에서 배열은 다음과 같이 사용할 수 있다.
c++
자료형 배열이름[인덱스 개수];
int arr[10]; // 선언
배열이름[인덱스];
arr[6]; // 접근이를 활용하여 1부터 5까지 배열에 저장하고, 순서대로 출력하는 코드를 쓸 수 있다.
c++
int main() {
int arr[5];
for(int i = 0 ; i < 5 ; i++) {
cin>>arr[i];
}
for(int i = 0 ; i < n ; i++) {
cout>>arr[i]>>" ";
}
}배열은 단점도 존재한다. 배열의 크기를 너무 크게 설정하면 백준 문제를 풀다가 메모리 초과가 날 수도 있다. 그렇기에 이 때는 동적 할당을 해주는 벡터가 필요하다.
2. 벡터 ★
C++에서는 벡터라는 특수한 자료형을 사용할 수 있다. 벡터는 우리가 값을 넣을 때 크기를 키우고, 자료를 없애면 크기가 줄어드는 동적 할당 리스트이다. 그렇기에 위에서 서술한 배열의 단점을 없앨 수 있다. 아래는 C++에서 벡터를 사용하는 방법이다.
c++
#include <vector> //vector 헤더파일 필요
vector<자료형> 벡터이름;
vector<int> v; // 선언
벡터이름[인덱스];
v[10]; //접근
// 벡터 내장 함수 : 벡터이름.함수() 로 사용가능
// 삽입, 삭제
v.push_back(value); // value 값을 벡터의 맨 뒤에 추가
v.pop_back(); //마지막 원소 삭제
v.insert(pos, value); // pos 위치에 value 삽입
v.erase(pos); // pos 위치 요소 제거
v.front(); // 벡터의 첫번째 원소 반환
v.back(); // 벡터의 마지막 원소 반환
v.begin(); // 벡터의 첫번째 원소의 주소
v.end(); // 벡터의 마지막 원소의 주소
v.size(); // 벡터의 크기 반환이외에도 많은 벡터 멤버 함수가 있지만 자주 사용하는 것만 정리해보았다.
벡터는 정렬에 서술한 sort 함수와 연계하여 정렬을 쉽게 할 수 있다는 장점이 있기 때문에 벡터를 활용하는 방법은 백준을 풀 때 꼭 알아야 한다고 생각한다.