자료구조 와 알고리즘/c++ 3

std::list

std::list singly-linked list는 std::forward_list 참고 이중 연결 리스트(doubly-linked list) 구조로 되어 있다. 양방향으로 데이터를 추가/삭제 할 수 있다. 정방향, 역방향으로 리스트를 이동할 수 있다. size(), push_back(), pop_back() 등 연산은 O(1) 시간복잡도를 가진다. 임의의 원소를 접근시 O(N) 시간복잡도를 가진다. https://en.cppreference.com/w/cpp/container/list list 사용예제 #include #include using namespace std; int main() { std::list list1 = {1, 2, 3, 4, 5}; list1.push_back(6); list1..

std::vector

std::vector 벡터에 새로운 원소를 추가할 경우 동작 push_back, insert 원소를 삽입할때 공간이 남아 있다면 O(1)의 시간이 걸린다. 하지만 공간이 없을 경우 아래의 로직이 수행된다. 2*size 크기의 메모리를 새로 할당 새로 할당한 메모리로 기존 원소를 전부 복사/이동 데이터 포인터를 새로 할당한 메모리 주소로 지정 원소를 추가하고 벡터크기를 1만큼 증가한다. 이 경우 O(n)의 시간복잡도이다. https://en.cppreference.com/w/cpp/container/vector 예제 초기화 방법 // 크기가 0인 벡터 선언 std::vector vec1; // 지정한 초깃값으로 벡터 선언 std::vector vec2 = {1, 2, 3, 4, 5}; // 크기가 10인 ..

std::array

std::array std::array는 고정 크기 배열을 캡슐화하는 컨테이너이다. 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿이다. c 스타일 배열처럼 쓸수 있는 []연산자 제공한다. []연산자는 빠른 동작을 위해 전달된 인덱스값이 배열의 크기보다 큰지 작은지 검사를 하지 않는다. at(int index)를 사용할 경우 index 값이 유효하지 않을 경우 std::out_of_range 예외를 발생시킨다. 반복자를 지원한다. 범위기반 (ranged) for문을 사용 할 수 있다. https://en.cppreference.com/w/cpp/container/array 예제 c 스타일 배열 void array1() { int datas[] = {1, 2, 3, 4, 5}; int size..