C++4 move semantic과 lvalue, rvalue lvalue와 rvalue는 각각 copy semantic, move semantic과 큰 관련이 있다.Lvalue와 Rvaluestd::string a = "abc"; // =을 기준으로 왼쪽에 있으면 lvalue, 오른쪽에 있으면 rvaluestd::string b = a; // 둘 다 lvaluervalue: 메모리 공간에 넣을 데이터 값. 한 번 쓰고 버릴 temporary한 값.lvalue : rvalue가 들어갈 공간. 우리가 계속 불러서 쓸 수 있는 변수.lvalue는 & 하나, rvalue는 && 두 개 그래서 lvalue는 어떠한 메모리 공간을 가리키고 있기 때문에 해당 메모리 공간의 값을 복사(copy semantic)해서 data container(예로 vector)에 넣을 수 있다... 2024. 10. 24. std::vector 란? C++에서는 다양한 데이터 컨테이너가 있는데, 그 중 vector는 단연코 가장 많이 쓰이는 데이터 타입이다. Vector 란?vector는 연속된 동적 메모리 공간이다. 때문에 vector의 사이즈가 유동적으로 변할 수 있다.연속된 메모리 공간은 heap에 생성되고, C++의 모든 오브젝트는 stack에서 시작되기 때문에 vector 오브젝트는 stack에 존재한다.이 때 이 vector 객체를 까보면 pointer, size, capacity로 나뉘어져 있다.pointer는 heap 영역 내의 연속된 메모리 공간의 첫번쨰를 가리키고, size는 이 공간의 size를 말한다.capacity는 이 메모리 영역이 어디까지 할당할 수 있냐를 의미한다. 이 때, capacity가 다 찬 vector는 새로 .. 2024. 10. 23. 해쉬 테이블 Key-Value 구조로 데이터를 저장하는 자료구조로, 배열보다 검색과 삽입에 더 빠른 효율을 보인다. C++을 사용할 때 흔히 사용하는 map 자료구조를 구현할 때 가장 효율적으로 사용되는 방법이다. Hash란 무엇일까? 해쉬 테이블은 내부에 array와 같은 구조가 있지만, hash function 덕분에 선형 검색을 하지 않고 빠르게 값을 찾을 수 있다. 해쉬 함수는 우리가 입력하는 key 값을 어떠한 정수값으로 치환하여 array의 index로 변환한다. 이 때, 각각 다른 key에 대해 해시함수가 동일한 index를 부여하는 경우 해쉬 충돌(hash collision)이라고 한다. 이 해쉬 충돌의 대표적인 대처 방법은 다음과 같다. index가 가리키는 저장소 안에 또 다른 배열을 생성하여 같은.. 2024. 2. 11. Functor에 대하여 (Function Objects) 이 글은 https://www.bogotobogo.com/cplusplus/functors.php을 해석한 것입니다. Functor(함수 객체 또는 functional)은 객체+() 이런 구조로 이루어져 있습니다. functor는 함수처럼 실행시키기 위해 operator()을 쓸 수 있는 다양한 객체들을 말합니다. 여기에는 일반 함수(normal functions), 포인터 함수(pointers to functions), 그리고 클래스 객체들이 포함됩니다. 즉 functor의 기본 조건에는 operator()가 오버로딩되있어야 한다는 뜻입니다. 우리는 평소에 쓰던 소위 흔한 함수들이 동작하지 않을 때 함수 객체를 쓸 수 있습니다. STL은 꽤나 자주 함수 객체들을 사용하고, 요긴하게 쓸 수 있는 몇 가지.. 2023. 1. 23. 이전 1 다음