반응형 프로그래밍/C++8 C++ unordered_map이란? unordered_map이란?기존에 익숙한 map과 비슷하지만 정렬되지 않은 해시 기반 컨테이너(이름에서부터 정렬되지 않음을 들어냄)Key-Value 쌍으로 데이터를 저장Key를 기준으로 해시(hash)를 이용해 빠르게 탐색, 삽입, 삭제가 가능내부적으로 해시 테이블(Hash Table)을 사용원소의 순서를 보장하지 않음. (반복자로 순회 시 삽입 순서로 정렬되어 있지 않음)평균 시간 복잡도탐색(find) : O(1)삽입(insert) : O(1)삭제(delete) : O(1)기본 사용 예제#include #include using namespace std;int main(){ unordered_map unMap; unMap.emplace(1, "jane"); unMap.emplace(2.. 2025. 7. 6. 비주얼 스튜디오 2022(Visual Studio 2022)에서 C++ 언어 표준 변경하기 C++ 언어 표준 변경하고 모던 C++을 사용해 보자비주얼 스튜디오에서 모던 C++을 사용하려고 예제를 작성했는데 이럴 수가 컴파일 에러가 발생했다.이유는 바로 C++ 17에서 추가된 구조적 바인딩을 사용했기 때문이다. 이를 해결하기 위해서는 프로젝트 속성에서 C++ 17 표준 이상으로 올려줘야 한다. 수정해 보자.#include int main(){ std::cout myPair = { 1, 2 }; auto [a, b] = myPair; // error}C++ 언어 표준 변경하기프로젝트 선택 후 - 마우스 오른쪽 클릭 - 속성(R) 클릭구성 속성 > C/C++ > 언어 > C++ 언어 표준 > 해당하는 C++ 표준을 선택(기본값은 C++ 14)C++ 17로 변경했더니 바로 빨간 줄이 사라.. 2025. 7. 1. C++ 소켓 프로그래밍(Socket Programming) 에코 클라이언트 에코 클라이언트(Echo Client) 만들기C++로 소켓 프로그래밍을 공부할 때 가장 기본이 되는 서버는 클라이언트로부터 문자열을 수신받아서 해당 문자열을 그대로 송신하는 일명 에코서버를 작성해 보는 것이다. 저번 글에서 서버를 만들었다면 이번에는 소켓 클라이언트를 작성해서 소켓 프로그래밍의 기본적인 작동 흐름에 대해서 배워보도록 하자. 전반적인 흐름에 대해서 정리해보자면소켓 생성접속할 IP, PORT를 지정connect()를 통해서 해당 서버에 접속send(), recv() 사용해서 서버와 문자열 주고받기 예제 코드#include #include #include #pragma comment(lib, "ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){ WSADat.. 2024. 7. 31. C++ 소켓 프로그래밍(Socket Programming) 에코 서버 에코 서버(Echo Server) 만들기C++로 소켓 프로그래밍을 공부할 때 가장 기본이 되는 서버는 클라이언트로부터 문자열을 수신받아서 해당 문자열을 그대로 송신하는 일명 에코서버를 작성해 보는 것이다. 에코 서버를 작성하면서 소켓 프로그래밍의 기본적인 작동 흐름에 대해서 배워보도록 하자. 전반적인 흐름에 대해서 정리해보자면소켓 생성IP, PORT 소켓에 바인딩listen()으로 클라이언트 접속 대기 상태로 전환하기accept()로 클라이언트와 연결하기recv(), send() 사용해서 클라이언트와 문자열 주고받기 예제 코드#include #include #include #pragma comment(lib, "ws2_32.lib")int _tmain(int argc, _TCHAR* argv[]){ WS.. 2024. 7. 31. C++ puts() vs printf() 차이점에 대해서 알아보자 puts()C++에서 문자열을 출력할 때 puts()와 printf()의 차이점을 명확하게 알지 못하고 사용하고 있었다.이번 기회에 둘의 차이점에 대해서 명확하게 알아보고 가자. int _tmain(int argc, _TCHAR* argv[]){ puts("1234"); puts("1234"); puts("1234"); puts("1234"); return 0;} puts()를 사용하면 별도의 개행 입력 없이도 자동으로 개행시켜 준다.printf()이에 반해서 printf()는 자동으로 개행시켜 주지 않는다. int _tmain(int argc, _TCHAR* argv[]){ printf("1234"); printf("1234"); printf("1234"); printf("1234"); return 0.. 2024. 7. 25. 이상하게 반복되는 템플릿 패턴(Curiously Recurring Template Pattern, CRTP) 이상하게 반복되는 템플릿 패턴 CRTP(Curiously Recurring Template Pattern)는 클래스 x가 x 자체를 사용하는 클래스 템플릿 인스턴스화에서 파생되는 C++의 관용어이다. 이를 통해 가상 함수 없이도 동일한 함수를 여러 클래스에서 사용할 수 있는 정적 다형성을 구현할 수 있다. 하지만 이 패턴을 사용하는데는 몇 가지 문제가 있는데 주요 문제 중 하나는 메서드 숨김으로, 파생 클래스가 부모 클래스의 메서드를 실수로 숨실 수 있다는 것이다. (동일한 메서드명으로 선언) 추가로 CRTP 기본 클래스가 템플릿이어야 하므로 복잡성이 증가되고 디버깅하기 어려운 오류가 발생할 수 있다는 것이다. 메서드 숨김 문제를 해결하려면 베이스 클래스에서 메서드를 선언할 때 가상 키워드(virtual.. 2023. 9. 25. 이전 1 2 다음