본문 바로가기
inflearn/Do it! 알고리즘 코딩테스트 with C++

섹션1. 자료구조(Data Structure). 배열과 리스트 그리고 *벡터

by 슐리반 2023. 9. 28.

<배열 >

º  메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조
º  인덱스를 통해 참조하며, 선언한 자료형의 값만 저장
º  새로운 값을 추가하거나 특정 인덱스 값을 삭제하려면 해당 인덱스 주변에 있는 값을 이동시켜야 하기에 어려움이 있다.
º  배열의 크기는 한번 선언하면 크기를 늘리거나 줄일 수 없다
º  구조가 간단해 코딩테스트에 많이 사용된다.

 

< 리스트 >

º  값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조 (노드는 값과 포인트를 갖는 기초 단위)
º   인덱스가 없어 값에 접근하려면 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 누르면서 한줄씩 실행해보기

하단에 디버깅 창 확인
한줄씩 실행되면서 데이터 삽입되는거 확인