C++프로그래밍/자료구조,알고리즘(추후확장) 15

자주 쓰이는 알고리즘

※ 개인적인 공부를 위해 포스팅 하는 글입니다.   find    find_if    count    count_if    all_of    any_of    none_of    for_each   remove    remove_if # vector로 확인해 보자 srand(static_cast(time(nullptr))); vector v; for (int i = 0; i   01. number숫자가 있으면 found 트루 #find auto itFind = find(v.begin(), v.end(),number); ㆍ 직관적이고 간단하다. 시작~끝 넘버있는지, 반환타입은 이터레이터를 반환해주는 모습 if (itFind == v.end()) { cout    02. 11로 나뉘..

연관 컨테이너

※ 개인적인 공부를 위해 포스팅 하는 글입니다.mapsetmultimapmultiset  # setset s; // (key = Value)// 나머지 특징들은 map과 동일하다. 키가 곧 값. 따라서 중복된건 빼고 정렬을해준다./* 넣고 빼고 찾고 순회하고*/s.insert(10);s.insert(20);s.insert(80);s.insert(90);s.insert(50);s.insert(40);s.insert(60);s.insert(70);//빼고s.erase(40);//찾고set::iterator findIt = s.find(50);if (findIt == s.end()){ cout ::iterator it = s.begin(); it != s.end(); ++it){ cout ㆍ ..

map

※ 개인적인 공부를 위해 포스팅 하는 글입니다.▶ 연관 컨테이너 ◀ 간단한 개념 정리 링크: https://season97.tistory.com/34 STL▶  STL이란? ㆍ STL은 Standard Templae Library의 약자로 C++의 표준 라이브러리중 하나 ㆍ다양한 데이터구조와 알고리즘을 템플릿으로 제공하는 라이브러리 ㆍ stl은 크게 컨테이너, 반복자, 알고리season97.tistory.com 만약 vector를 이용해서 id기반으로 Player를 찾는다고 생각해 보자...class Player{public: Player(int playerId) : _playerId(playerId) {} int _playerId;};int main(){ vector v; for ..

deque

※ 개인적인 공부를 위해 포스팅 하는 글입니다.▶ 시퀀스 컨테이너 ◀ vector : 동적 배열 [                            ]   list : 이중 연결 리스트 [ ] [ ] [ ] [ ] [ ] [ ] # deque의 동작 원리 deque : double ended queue [         ]  [          ]  [          ]양방향으로 사용하는 큐..?deque dq;dq.push_back(1);dq.push_front(2);cout ㆍ 벡터와 마찬가지로 배열 기반으로 동작 메모리를 까보자 # 테스트 코드vector v(3, 1);deque dq(3, 1);v.push_back(2);v.push_back(2);dq.push_back(2);dq.push_bac..

list 구현해보기

▶ 목표ㆍ push_back , pop_backㆍ 다양한 자료형을 받기 위해 템플릿으로 구현ㆍ insert, erase ㆍ 연산자 오버로딩 활용해서 실제 list처럼 보이게ㆍ 이터레이터 구현 #Nodetemplateclass Node{public: Node() : _next(nullptr), _prev(nullptr), _data(T()) { } Node(const T& value) : _next(nullptr), _prev(nullptr), _data(value) { }public: Node* _prev; Node* _next; T _data;};ㆍ STL에서 list는 양방향 리스트기 때문에 노드 클래스를 이렇게 작성.  #List// 리스트는 헤더가 ..

list와 list의 이터레이터

※ 개인적인 공부를 위해 포스팅 하는 글입니다.list는 한마디로 양방향 연결 리스트 list의 동작 원리중간 삽입/삭제처음/끝 삽입/삭제인덱스 접근 ★ 동작 원리  list는 단일,이중,원형 ㆍ std::list는 양방향 연결 리스트(이중 리스트)로 구현되어있다.  ㆍ 벡터는 [           ] 메모리 공간에 요소들이 연속적으로 나열되어 있었다... ㆍ 1개의 인자들이 있는 공간은(단위) 노드 라고 부르며 노드들은 본인 기준으로 이전노드와 다음노드의 포인터를 가지고 있다!class Node{public: Node* _next; Node* _prev; int _data;};ㆍ 이런식으로 기초 설계도를 작성해 볼 수 있겠다. 이런 노드들의 집합이 list 컨테이너다. 더보기# 단일리스..

vector 직접 구현해보기

※ 실습 포스팅 입니다. ▶ 목표ㆍ push_back , pop_backㆍ 다양한 자료형을 받기 위해 템플릿으로 구현ㆍ reserve와 capacity,sizeㆍ 연산자 오버로딩 활용해서 실제 vector처럼 보이게ㆍ 이터레이터 구현  # 이터레이터 구현 전 Vectortemplateclass Vector{public: Vector() : _data(nullptr), _size(0), _capacity(0) { } ~Vector() { delete[] _data; } void push_back(const T& val) { //사이즈가 용량을 초과할라 하면 용량 늘려주고 reserve로 복사 후 이동 if (_size == _..

vector의 삽입삭제, 인덱스접근

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다.vector는 한마디로 동적배열vector의 동작 원리(size / capacity)중간 삽입/삭제처음/끝 삽입/삭제인덱스 접근 # vector ㆍ 동적 배열이라 함은 동적으로 커지는 배열.... = 배열 ㆍ 원소가 하나의 메모리 블록에 연속적으로 저장된다.   # 중간 삽입/삭제ㆍ 중간에서 삽입하려면 2 3 4 5 데이터는 뒤로 1칸씩 밀어줘야 한다.. 삽입,삭제는 배열의 끝에서만 효율적이다. ㆍ 삭제도 마찬가지로 빈 공간이 있으면 메모리 블록에 연속적인 저장된 형태가 아니게 된다.  따라서 1칸씩 앞으로 밀어준다. v.insert(v.begin() + 2, 5); cout ..

vector와 iterator

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. # vector  iterator 더보기 # 내용과 좀 무관하긴 하지만 오류가 거슬려서 없애는방법을 찾아봄..vector v(10);for (vector::size_type i = 0; i (v.size()); i++){ v[i] = i;}ㆍ v.size가 unsigned int를 뱉어가지고 경고가뜨길레... 이렇게하면 없어진다!int main(){ vector v(10); for (vector::size_type i = 0; i ::iterator it; int* ptr; it = v.begin(); ptr = &v[0]; cout ㆍ ..

vector의 동작 원리(size / capacity)

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다.  vector는 한마디로 동적배열  vector의 동작 원리(size / capacity)중간 삽입/삭제처음/끝 삽입/삭제인덱스 접근더보기# 배열의 단점? const int MAX_SIZE = 10; int arr[MAX_SIZE] = {}; for (int i = 0; i ㆍ 크기가 정적임 # vector vector v;ㆍ 간단한 선언 방법. ★특성1) 메모리를 처음 할당할 때 여유분을 두고 메모리를 할당한다.# 여유분은 얼만큼이 적당할까?? # 증설을 얼만큼 해야할까??  vector v; for (int i = 0; i ㆍ size와 capacity를 찍..