<배열 >
º 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조
º 인덱스를 통해 참조하며, 선언한 자료형의 값만 저장
º 새로운 값을 추가하거나 특정 인덱스 값을 삭제하려면 해당 인덱스 주변에 있는 값을 이동시켜야 하기에 어려움이 있다.
º 배열의 크기는 한번 선언하면 크기를 늘리거나 줄일 수 없다
º 구조가 간단해 코딩테스트에 많이 사용된다.
< 리스트 >
º 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 (노드는 값과 포인트를 갖는 기초 단위)
º 인덱스가 없어 값에 접근하려면 head 포인트부터 순서대로 접근해야한다 (접근 속도가 느리다)
º 포인터로 연결되어 있어 데이터 삽입, 삭제가 빠르다
º 선언할때 크기를 별도로 지정하지 않아도 된다.
º 즉, 리스트의 크기가 정해져 있지 않아 크기가 변하기 쉬운 데이터를 다룰 때 적절하다
º 포인터를 저장할 공간이 필요하므로 배열보다 구조가 복잡하다.
< 벡터 >
º 배열과 같은 특징을 가지면서 배열의 단점(크기 고정)을 보완한 동적 배열의 형태
º 동적으로 원소를 추가할 수 있어 크기가 자동으로 늘어난다
º 가장 마지막에 데이터 삽입, 삭제는 문제가 없지만 중간 위치에 데이터 삽입,삭제는 배열과 같은 메커니즘으로 동작
º 배열과 마찬가지로 인덱스를 사용한다
º 즉, 배열과 똑같은 장점을 가지고 있는데 배열의 단점이었던 데이터 추가를 보완한게 벡터(배열은 크기 고정)
º 코딩테스트에서 c++에서는 벡터를 많이 사용한다.
#include <iostream>
#include <vector> //라이브러리 추가
using namespace std;
int main()
{
vector<int> A; //Vector<자료형> 변수명
A.push_back(10);
A.push_back(30);
A.push_back(5);
A.push_back(8);
A.push_back(6);
A.push_back(1);
A.insert(A.begin(), 7);
A.insert(A.begin()+2,10);
A[4] = -5;
A.pop_back();
A.erase(A.begin()+3);
cout << A.size() << endl;
cout << A.front() << endl;
cout << A.back() << endl;
cout << A[3] << endl;
cout << A.at(5) << endl;
A.clear();
}
<디버깅 하는법>
1, 중단점 생성
2. 디버깅 시작
3. F10 누르면서 한줄씩 실행해보기
'inflearn > Do it! 알고리즘 코딩테스트 with C++' 카테고리의 다른 글
섹션2. 정렬(Sorting). 버블정렬(Bubble Sort) (1) | 2023.10.01 |
---|---|
섹션1. 자료구조(Data Structure). 스택과 큐 (1) | 2023.10.01 |
섹션1. 자료구조(Data Structure). [투 포인터 실전 문제] 좋은 수 구하기(백준 1253) (1) | 2023.09.30 |
섹션1. 자료구조(Data Structure). 구간 합 (0) | 2023.09.30 |
섹션0. 코딩테스트 준비하기 (0) | 2023.09.28 |