Programming language(17)
-
[C/C++]STL 컨테이너 - std::map/std::set 그리고 std::deque
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 이전 글인 [C/C++]STL 컨테이너 - std::vector 와 std::list 에 이어지는 글입니다. 이번 글에서는 std::map과 std::set 그리고 std::deque에 대해서 알아보겠습니다. std::map과 std::set 위의 두 컨테이너는 기능상으로는 매우 유사하기에 같이 다루겠습니다. 차이라고 한다면 map은 key와 그 키의 값에 해당하는 value가 함께 저장되고, set은 key값만 저장되는 구조입니다. 간단한 특징들은 다음과 같습니다. map 레드 - 블랙 트리 기반 Key값과 데이터를 한쌍의 원소로 관리하는 컨테이너 Key값의 중복을 허용하지 않음 (multmap의 경우 key 부분의 중복을 허용함) Key값..
2022.04.08 -
[C/C++]STL 컨테이너 - std::vector 와 std::list
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 과거 취업활동을 위하여 면접을 보러 다닐 때 많이 들었던 질문이 있습니다. STL 컨테이너뿐 아니라 C#의 컬렉션 등 각 언어별 개체(데이터)의 그룹을 다루는 기술은 내부적으로 고유의 자료구조가 있습니다. 이 때문에 자료구조에 대한 이론적인 내용이나 알고리즘, 메모리 최적화는 물론 이를 적절하게 활용할 수 있는지 보는 단골 질문입니다. 오늘은 개인적으로 많이 쓰인다고 생각하는(면접에서 가장 많이 물어보았던 것 위주) C++ STL의 표전 컨테이너들에 관하여 알아보려 합니다. 이번 글에서는 std::vector 와 std::list 에 관하여 알아보겠습니다. std::vector 랜덤 액세스 iterator를 사용하는 배열 기반의 자료구조 배열..
2022.04.08 -
[C/C++]L-Value와 R-Value
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 이전 글인 [C/C++]이동의미론(Move Semantics) 에서 언급한 L-Value 와 R-Value 에 관한 내용입니다. L/R 은 화면 기준 왼쪽(Left) 에 오는 값이냐 오른쪽(Right)의 차이입니다. L-Value와 R-Value L-Value Reference(좌측값 참조)와 R-Value Reference(우측 값 참조)에 관한 간단한 정리 L-Value Reference(좌측값 참조) 이름이 있고 '계속 남아있는 값' 이 L-Value(좌측 값) 좌측 값 참조는 좌측 값만을 참조 '&' (레퍼런스 연산자)를 이용함, 즉 대입받은 값을 참조 임시 값은 좌측 값 참조를 할 수 없음 L-value 참조 생성자/할당자 연산은 복..
2022.04.08 -
[C/C++]이동의미론(Move Semantics)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 C++11을 처음 접했을 때 알게 된 내용이다. 기존에는 값을 복사하는 방식으로 인자의 전달, 값의 반환 등의 작업이 진행되었다. Move Semantics은 이러한 작업이 값을 복사하여 진행되는 것이 아닌 이동을 통해 진행된다는 개념입니다. 즉, 어차피 같은 값인걸 복사하는 비용과 임시 변수를 생략하고 그대로 쓸 수 없을까? 를 실현하기 위하여 도입된 게 아닐까라고 개인적인 생각입니다. 이동 의미론과 복사 의미론 일반적으로 값이 복사되어 작업을 진행할 경우 다음과 같은 과정으로 진행됩니다. (복사 의미론) 멤버 변수를 위한 새로운 리소스 할당 => 새로운 공간 할당 인자로 부터 this 포인터로 복사 => 새로운 공간에 기존에 있던 값들 복..
2022.04.08 -
[C/C++]입력 예외 처리(Handling input exceptions)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 프로그래밍을 하다 보면, 사용자 입력을 받아야 할 때가 생긴다. C와 C++에서는 표준 입력 함수인 scanf() 함수와 C++의 std::cin istream 객체가 있겠다. 이러한 것들을 이용하여 사용자 입력을 받을 때 '잘못된 데이터'를 받는다면? 현상 예를 들어 보겠습니다. int num = -1; printf("정수 입력"); scanf("%d", &num); 위와 같은 코드에서 만약 문자(%c format) 같은 것을 입력한다면? 결론만 말하자면 유감스러운 결과를 보게 될 것입니다. 루프 안에 저 코드가 있다면 끔찍한 무한루프를 겪게 될 것이며, num의 값은 -1로 고정될 것입니다. scanf() 와 std::cin 모두 다음과 ..
2022.04.07