본문 바로가기

Language/C++

(33)
[C++] 비트 연산 ※ int는 32bit (4byte)이지만, 이 게시물에서 편의상 8bit로 표현하였음 비트 연산자 a = 0b1110 / b = 0b0100 활용 & (AND) a & b = 0b0100 둘 다 1이면 켜짐 어떤 비트가 켜져 있는지 확인 | (OR) a | b = 0b1110 둘 중 1이 하나라도 있으면 켜짐 비트를 켤 때 ^ (XOR) a ^ b = 0b1010 서로 다르면 켜짐 비트를 끄거나 반전시킬 때 ~ (NOT) ~a = 0b0001 비트를 반전시킴 비트를 끌 때 (&와 함께 사용) (오른쪽 Shift) a >> n = a * (2 ^ -n) 비트 연산을 사용할 때 우선순위에 주의가 필요하다. 일반적으로 사칙연산(+, -, *, /)은 비교, 논리 연산자(==, >, && 등)보다 우선순위가 ..
[C++] advance 함수 std::advance(_InIt& _Where, _Diff _Off) 함수는 off만큼 반복자를 이동시킨다. vector v = { 1, 2, 3, 4, 5 }; auto it = v.begin(); advance(it, 1); cout
[C++] 문자열 split 함수 구현하기 C++에는 string을 나누는 split 함수가 존재하지 않기 때문에 직접 구현해서 사용해야 한다. split 함수를 구현하는 많은 방법이 있지만, 그 중 sstream을 사용하는 방법은 다음과 같다. #include #include #include using namespace std; vector split(string str, char delimiter); int main(){ string test = "min seon kim"; vector result = split(test, ' '); for (int i=0;i
[C++] 원하는 자리수까지 출력하기 (반올림, 올림, 내림) 기본적인 반올림, 올림, 내림 가 필요하고 반올림은 round(숫자), 올림은 ceil(숫자), 내림은 floor(숫자)이다. 소수점 첫 번째 자리에서 반올림한다. #include #include using namespace std; int main() { float num = 3.47; cout
[C++] PS할 때 전역변수를 써야 하는 경우 1. 배열을 전역으로 선언하면 기본값이 0으로 초기화된다. 하지만 지역변수는 0으로 초기화된다는 보장이 없다. 지역변수로 선언할 때 0으로 확실히 초기화하고 싶으면 int cnt[50001] = {0, } 이렇게 선언하면 된다. 2. 지역변수로 선언하면 메모리의 스택 영역에 할당된다. 스택은 메모리가 작아 크기가 큰 배열을 선언하기에 적당하지 않다. 전역변수는 메모리 데이터 영역에 할당되며, 크기가 큰 배열을 선언해도 문제없이 할당된다. 10만 이상 크기의 배열은 전역으로 선언하는 것이 좋다.
[C++] STL - 정렬 알고리즘 함수 (sort, stable_sort, binary_search) 정렬 알고리즘 함수는 컨테이너의 지정된 범위의 요소들이 정렬되도록 컨테이너를 변경하는 함수이다. 모든 정렬 알고리즘 함수는 올바른 정렬을 위해 임의 접근 반복자를 사용한다. 따라서 임의 접근이 가능한 컨테이너만이 사용할 수 있다. sort() #include // < 를 이용한 비교 (1) template void sort(RandomIt first, RandomIt last); // 비교 함수 (comp) 를 이용한 비교 (2) template void sort(RandomIt first, RandomIt last, Compare comp); first부터 last 전까지의 원소들을 오름차순으로 정렬한다. first와 last는 임의 접근 반복자여야 한다. 따라서 list의 경우 sort 함수로 정렬할..
[C++] STL - 변경 알고리즘 함수 (copy, swap, transform, next_permutation) 변경 알고리즘 함수는 컨테이너를 변경하지 않으며, 컨테이너의 지정된 범위에서 요소의 값만을 변경할 수 있는 함수이다. STL에서 제공하는 대표적인 변경 알고리즘 함수에는 copy(), swap(), transform()이 있다. copy() #include template OutputIt copy(InputIt first, InputIt last, OutputIt d_first); first부터 last 전까지의 모든 원소들을 d_first부터 시작하는 곳에 복사한다. swap(), swap_range() #include template void swap (T& a, T& b) swap의 경우 해당 변수에 있는 값들을 서로 바꿔주는 역할을 한다. #include template< class Forward..
[C++] STL - 읽기 알고리즘 함수 (find, for_each) STL의 목적은 일반적인 알고리즘에 대한 효율적인 구현을 제공하는 것이다. 따라서 STL은 이러한 알고리즘을 STL 알고리즘 함수나 STL 컨테이너의 멤버 함수를 사용하여 구현하고 있다. STL 알고리즘은 기능별로 다음과 같이 구분할 수 있다. 읽기 알고리즘 (algorithm 헤더 파일) 변경 알고리즘 (algorithm 헤더 파일) 정렬 알고리즘 (algorithm 헤더 파일) 수치 알고리즘 (numeric 헤더 파일) 이 글에서는 읽기 알고리즘 함수에 대해 알아보자. 읽기 알고리즘 함수는 컨테이너를 변경하지 않으며, 컨테이너의 지정된 범위에서 특정 데이터를 읽기만 하는 함수이다. STL에서 제공하는 대표적인 읽기 알고리즘 함수에는 find(), for_each()가 있다. find() #includ..