쾌락없는 책임 (공부)/C++ 짜잘이
-
[C++] vector, deque 의 차이 - 메모리는 어떻게 관리할까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 14. 16:36
서론 vector에 대한 이야기는 많이 있습니다. 가장 많이 접하게 되는 컨테이너기도 하고 vector만 있으면 대부분의 상황에서 큰 문제가 없거든요. vector와 비슷한 deque는 뒤로만 넣는 vector와 다르게 push_front(), pop_front() 의 함수가 있어 앞, 뒤로 사용할 수 있다는 장점이 있는 컨테이너입니다. 뭐 이런 차이에 대해서는 누구나 알고 있는 부분이라고 생각됩니다. 그래서 오늘은 메모리 관점에서 vector와 deque는 어떻게 다른 방식을 취하는지 알아보도록 하겠습니다. vector는 재할당, deque는 쪼개져 있다 vector의 경우 메모리 내에서 연속적인 위치에 있는 방식을 취하고 있습니다. 만일 기존에 사용하던 용량이 가득찬 채로 원소를 추가적으로 삽입하면 ..
-
[C++] C++ sort는 어떤 알고리즘을 사용할까쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 13. 15:57
서론 '리스트는 어떤 정렬 알고리즘을 사용하나요?' 사실 algorithm 헤더에 있는 sort는 어떤 알고리즘을 사용하는가에 대한 이야기는 많이 있었습니다. 그런데 리스트의 경우 리스트 내부 함수로 sort 함수가 있으며 이 함수가 어떤 알고리즘을 채용하는지 알수 없었습니다. 때문에 여기저기 돌아다니면서 얻은 정보를 정리해서 작성해보려고 합니다. 혹시나 더 좋은 정보를 얻으신 분들이 있다면 꼭꼭 댓글로 알려주시면 감사하겠습니다 (_ _) 헤더에 있는 sort 함수 - 퀵소트, 인트로 소트 일단 vector 등에 사용할 수 있는 sort 함수의 경우 간단하게 자료들을 구할 수 있었습니다. 그리고 내린 결론은 '이전에는 퀵소트를 사용했지만 현재는 intro sort를 사용하고 있다!' 입니다. 일단 퀵소트..
-
[C++] C++ iterator, 반복자 - 1쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 13. 15:01
개요 평소 iterator를 사용하지 않고 살아오다가 반복자에 대한 부분이 많이 부족한거 같아 이참에 한번 정리를 해보기로 했습니다. 보면서 아주 중구난방의 이야기들이 오가니 참고용 자료가 되지는 못할 것 같습니다. C++에서 iterator 사용 기존 배열, vector의 경우 인덱스를 통한 랜덤 접근이 가능하기에 반복자에 대한 필요성이 강조되지 않습니다. 하지만 set, map 등의 자료구조는 구조가 vector와 다르죠. 때문에 이것들을 탐색하기 위해서 반복자가 사용되게 됩니다. 일단 가장 쉬운 예시인 std::vector에 대해서 보겠습니다. 일단 begin(), end() 함수가 있는 만큼 vector는 반복자를 제공해 줍니다. 일단 vector 에서는 4개의 iterator를 두고 있습니다. ..
-
[C++] shared_ptr 은 어떻게 동작하게 될까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 9. 20:19
서론 스마트 포인터를 공부하게 되면 unique_ptr을 먼저 본 뒤 shared_ptr, weak_ptr을 보게 됩니다. 그러면 각 스마트 포인터들이 어째서 등장하게 되었는지 쉽게 알 수 있기 때문이죠. 저 같은 경우에도 위와 같은 흐름으로 공부를 했습니다. 일단 개념적인 부분들을 전부 알아낸 뒤 아직 사용은 해보지 않아 사용 시 어떠한 문제들이 있는지는 아직 잘 모르는 상태입니다. 그런데 shared_ptr의 경우 어떤 식으로 reference count를 하는지 궁금하게 되어 알아보게 되었고, 이에 따라 정리되는 지식들을 이렇게 블로그에 쓰는 중입니다. shared_ptr과 weak_ptr을 간단히 보면 일단 기존 unique_ptr의 경우 객체에 대한 소유권을 한 포인터에서만 가질 수 있게 관리하..
-
[C++] C++의 move semantics (의미론적 이동?)쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 7. 15:22
개요 C++에서 move semantics는 소유권을 이전해 주는 것! 제가 듣던 C++ 강의에서 나왔던 이야기입니다. 이전에 syntax는 문법에 맞는가를 이야기하는 것이고 semantics의 경우 내부적인 의미를 이야기합니다. 이 내용은 스마트 포인터를 보게 되면서 더 많이 알아보게 되는데요. 일단 기본적인 RAII 패턴을 지킨 클래스를 보면서 짚어보겠습니다. 저도 잘 머릿속에 잘 정리가 안된 개념이라 짚어가면서 해야 할 것 같네요. RAII 패턴 + std::move로 보는 move란 #include #include using namespace std; template class RAII { public: T* pointer; RAII(T* _pointer) : pointer(_pointer) { ..
-
[C++] C++ 로 중복 없는 랜덤 변수 만드는 방법 - 1쾌락없는 책임 (공부)/C++ 짜잘이 2022. 8. 5. 23:41
서론 (본론만 필요한 사람은 아래로) 연합 동아리 활동을 시작한 2021년, 동아리 카페에서 한 글이 올라왔었습니다. '랜덤 변수를 중복 없이 뽑는 방법은 이거뿐인가요?'. 단순 bool 배열을 통해서 5개 정도의 수를 랜덤 하게 뽑는 내용이었습니다. 이때 당시 이 글을 보고는 '음 일단 맞는데 뭔가 부족하다'라고 생각했었고 이후에 이 문제를 계속해서 마주하기에 이를 알아보고 정리하게 되었습니다. 아래 내용을 보면 아주 간단한 방식으로 하기에 그렇게 만족스러운 답은 아닌 상태입니다. 그러니 혹시나 다른 방법을 알고 계신다면 댓글로 남겨주심 감사하겠습니다. 일단 bool 배열로 visit 체크를 하는건 어떤 문제가 있는가? 일단 이전에 본 bool 배열의 경우 수를 많이 뽑지 않는 경우 문제가 없습니다. ..
-
[C++] C++ 의 '1LL'은 무슨 뜻일까?쾌락없는 책임 (공부)/C++ 짜잘이 2022. 6. 16. 17:45
개요 + 바로 결론 볼록 껍질 알고리즘 문제를 보다가 1LL 이라는 글을 봤는데 LL은 주로 long long 줄인 모습 같고 앞에 1은 뭘까 생각하고있었습니다. 그래서 찾아본 뒤 기록하기 위해서 글을 쓰는 것입니다. 결론을 먼저 말씀드리면 1LL은 1을 Long Long으로 표현한 것입니다. 숫자LL 일단 기본적으로 C++은 상수를 int 타입으로 계산을 하게 됩니다. #include using namespace std; int main(){ cout
-
C++ make_pair vs {}쾌락없는 책임 (공부)/C++ 짜잘이 2022. 3. 6. 12:33
서론 C++ 에서 정렬이 필요한 container용으로 pair를 주로 사용하는 편인데 평소 이것들을 넣을 때 make_pair 를 통해서 넣어주고 있었습니다. 그런데 다른 분드르이 코드를 보면 { } 안에 원소들을 넣어서 코드가 더 짧아보이는 일이 있었습니다. 평소에는 'make_pair이 최적화가 더 잘 되지 않을까?' 하는 생각에 계속 이를 사용했는데 이번에는 정확히 어떤 차이가 있는지 알아보도록 하겠습니다. make_pair vs std::pair 일단 넣는데 make_pair과 std::pair를 사용하는 방법이 있습니다. #include std::vector vec; int main(){ vec.push_back(std::make_pair(1, 2)); vec.push_back(std::pai..