본문 바로가기

c++62

C++ ] uint8_t, int_8t를 스트림 연산자(<<)로 출력할 때의 문제점 C++에서 char, singed char, unsigned char 타입은 스트림 연산자( uint8_t와 int8_t도 내부적으로 각각 unsigned char, singed char로 정의되어 있기 때문에 마찬가지이다. 즉, C++에서 8비트 데이터 타입 중 std::ostream  #include #include int main() { char c = 65; signed char sc = 66; unsigned char uc = 67; uint8_t u8 = 68; int8_t i8 = 69; std::cout    때문에 해당 타입을 정수로 출력하기 위해서는 명시적으로 다른 정수 데이터 타입으로 캐스팅을 하거나, std::cout (u.. 2025. 4. 18.
C++] 파일 입출력시 최적화 방안 C++ 기준 파일 입출력 시 최적화를 통해 속도 개선하는 방법들을 몇가지 소개한다. 1. 큰 버퍼를 미리 할당해서 메모리 재할당 방지 std::vector, std::string 등은 내부적으로 동적 메모리를 사용하는데, push_back()이나 append()로 데이터를 계속 집어넣다 보면 사이즈가 커질 때마다 메모리 재할당이 발생해서 성능이 저하될 수 있다.이를 방지하기 위해 reserve()로 초기에 충분한 용량을 미리 확보해 두면 이후 데이터 추가 시 메모리 재할당 없이 빠르게 처리할 수 있다.reserve()는 capacity만 늘릴 뿐 size()나 length()에는 영향을 주지 않으며, 선언 시 큰 사이즈로 만든 다음 clear()를 하더라도 capacity는 그대로 유지된다. std:.. 2025. 4. 17.
C++ ] 문자열 탐색 및 조작 함수, find() 외 문자열 탐색 함수 find : 문자열/문자의 처음 등장 위치 찾기rfind : 문자열/문자의 마지막 등장 위치 찾기find_first_of : 문자 집합 중 하나라도 처음으로 등장하는 위치 찾기find_last_of : 문자 집합 중 하나라도 마지막으로 등장하는 위치 찾기find_first_not_of : 주어진 문자 집합에 없는 첫번째 문자 위치 find_last_not_of : 주어진 문자 집합에 없는 마지막 문자 위치 찾기 ✔️ 위의 문자열 탐색함수는 문자열 내에서 특정 조건을 만족하는 요소를 찾지 못했을 경우 string::npos를 반환한다. string::npos는 상수값으로 size_t 타입의 최대값이다.✔️ find와 rfind 함수는 주어진 문자열에서 특정 문자열 뿐만 아니라 단일 문자를.. 2024. 6. 11.
C++ ] std::condition_variable 사용법 std::condition_variable은 C++에서 스레드 간의 동기화를 위해 사용되는 매커니즘 중 하나로, 한 스레드가 특정 조건이 충족될 때까지 대기하도록 하고, 다른 스레드가 그 조건을 충족시켰을 때 대기 중인 스레드를 깨우는 방식으로 사용한다. std::condition_variable은 주로 std::mutex와 함께 사용되며, 뮤텍스의 소유권을 관리하기 위해 std::unique_lock 클래스와 결합하여 사용된다. std::condition_variable 사용 패턴 스레드는 std::unique_lock를 사용하여 뮤텍스를 잠근다. 스레드는 std::condition_variable의 대기 함수(wait, wait_for, wait_until)를 호출하여 특정 조건이 충족될 때까지 대기.. 2024. 5. 12.
C++ ] std::unique_lock과 std::lock_guard의 차이 std::unique_lock과 std::lock_guard의 차이 std::unique_lock과 std::lock_guard 모두 스코프 기반의 락 관리를 제공한다. 객체가 스코프에 진입할 때 자원을 획득(락을 잠금)하고, 스코프를 벗어날 때 소멸자를 호출해 자동으로 자원을 해제(락을 해제)하는 방식이다. 사용자가 { }를 사용하여 직접 스코프를 지정하는 패턴으로 사용할 수도 있다. 둘의 차이점은 다음과 같다. std::lock_guard : 생성될 때 자동으로 락을 획득하고 소멸될 때 락을 해제한다. 도중에 수동으로 락을 잠그거나 풀 수 있는 기능을 제공하지 않는다. std::unique_lock : 생성될 때 자동으로 락을 획득하고 소멸될 때 락을 해제하며 lock(), unlock() 메소드를 .. 2024. 5. 4.
C++ ] std::unordered_map과 std::map의 차이, unordered_map의 사용법 std::unordered_map unordered_map은 STL에서 제공하는 해시 테이블 기반의 키-값 쌍을 저장하는 컨테이너로, 사용법은 map과 유사하지만 몇 가지 차이점이 있다.  내부 구현: map은 균형 이진 검색 트리(레드-블랙 트리)를 사용하여 요소를 저장한다.unordered_map은 해시 테이블을 사용하여 요소를 저장한다. 접근 시간: map에서 키-값 쌍에 접근하는 데 걸리는 시간은 O(log n)이다.unordered_map은 평균적으로 상수 시간 O(1)에 키-값 쌍에 접근할 수 있다. 단, 해시 충돌이 발생할 경우 최악의 경우 시간 복잡도는 O(n)에 수렴한다. 정렬: map은 키에 대해 unordered_map은 입력된 순서나 키에 대한 정렬을 유지하지 않고, 해시 함수의 결.. 2024. 4. 26.
C++ ] std::set 사용법 std::set STL에 포함되는 std::set은 중복이 없이 정렬된 데이터를 쉽게 관리할 수 있게 해주는 컨테이너로 내부적으로는 균형 이진 검색 트리(레드-블랙 트리)를 사용하여 요소를 저장한다. 가장 큰 특징은 중복을 허용하지 않으므로 모든 요소는 유일하며, 요소를 추가, 삭제, 검색할 때 std::set은 O(log n)을 보장한다. 1. set에 요소 추가하기 set에 요소를 추가할 때는 .insert() 메소드를 사용한다. 삽입 시도 시 중복 요소가 없으면 성공적으로 추가되고, 중복 요소가 있으면 추가되지 않는다. #include #include int main() { std::set mySet; // 요소 추가 mySet.insert(3); mySet.insert(1); mySet.inser.. 2024. 4. 22.
C++ ] leetCode 1418 - Display Table of Food Orders in a Restaurant 리트코드 1418 문제 Given the array orders, which represents the orders that customers have done in a restaurant. More specifically orders[i]=[customerNamei,tableNumberi,foodItemi] where customerNamei is the name of the customer, tableNumberi is the table customer sit at, and foodItemi is the item customer orders. Return the restaurant's “display table”. The “display table” is a table whose row entries.. 2024. 4. 20.
C++ ] std::iota 사용법 처음엔 itoa의 오타인 줄 알았다. std::iota는 헤더에 정의된 C++ 표준 라이브러리 함수로 배열이나 컨테이너에 연속적 숫자를 할당한다. 시작 반복자, 종료 반복자, 그리고 초기 값의 세 개의 매개변수를 받는다. #include #include std::vector v(10); std::iota(v.begin(), v.end(), 0); // v는 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}로 초기화됨 for 반복문을 사용해서 동일한 작업을 수행할 수 있다. 둘 다 O(n) 시간 복잡도를 가지며 유의미한 성능차이는 없을 것 같다. std::vector v(10); for(int i = 0; i < v.size(); ++i) { v[i] = i; } 2024. 4. 19.
C++ ] leetCode 3005 - Count Elements With Maximum Frequency 리트코드 3005 문제 You are given an array nums consisting of positive integers. Return the total frequencies of elements in nums such that those elements all have the maximum frequency. The frequency of an element is the number of occurrences of that element in the array. Example 1: Input: nums = [1,2,2,3,1,4] Output: 4 Explanation: The elements 1 and 2 have a frequency of 2 which is the maximum frequ.. 2024. 4. 16.