본문 바로가기

c & c++63

ios_base::sync_with_stdio(false); cin.tie(null); 구문을 추가해주는 이유 C++로 알고리즘을 풀 때 실행 속도를 높이기 위해 아래 구문을 작성해준다. ios_base::sync_with_stdio(false); cin.tie(NULL); ios_base::sync_with_stdio(false); 의 장점 ios_base::sync_with_stdio 구문은 c의 stdio와 cpp의 iostream을 동기화시켜주는 역할을 한다 이 때 iostream과 stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생한다. 따라서, ios_base::sync_with_stdio(false);코드를 작성해줌으로써 동기화를 비활성화시켜준다. 이로 인해, c++만의 독립적인 버퍼가 생성되어 c의 버퍼와 병행하여 사용할 수 없게 되지만, 사용하는 버퍼의 수가 줄어들었기 때문에 실행 속도는 빨라.. 2023. 5. 10.
맥에서 bits/stdc++.h 헤더 사용법 bits/stdc++.h - 'bits/stdc++.h' 모든 표준 라이브러리가 포함된 헤더이다. - 이 헤더는 표준 헤더가 아니기에 GCC가 아닌 컴파일러로 컴파일이 되지 않는다. - GCC를 컴파일러로 사용하는 대회에서는 유용하게 사용할 수 있다.(ex 백준 온라인 저지) 맥에서 bits/stdc++.h 헤더 설정법 1. g++ --version 커맨드를 이용하여 installedDir의 설치 경로를 확인해줌 2. cd /Library/Developer/CommandLineTools/usr/ -> include 폴더 열기 3. include 폴더 안에 bits폴더를 만든다. - mkdir bits -> permission denied 시에는 sudo 이용 - cd bits 4. bits 디렉토리에서 .. 2023. 5. 3.
형(타입, type) c++에서(type) - c++은 엄격한 타입시스템 언어이다. - type을 설정해줘야한다. 또한 매개변수의 수나 타입 등에 따라 함수가 다르게 설정된다. - func(int a, int b)와 func(int a)는 엄연하게 다른 함수로 인식된다. 1. void: 리턴하는 값이 없다. #include using namespace std; int ret = 1; void a(){ ret = 2; //ret을 2로 바꾸고 cout 2023. 1. 18.
입출력 #include //헤더파일 //STL 라이브러리를 import한다. //bits/stdc++.h는 모든 표준 라이브러리가 포함된 헤더 using namespace std; // std라는 namespace를 사용한다는 뜻. // cin이나 cout 등을 사용할 때 원래는 std::cin 이렇게 호출을 해야 하지만 // std를 기본으로 설정한다는 뜻입니다. // 같은 클래스 이름 구별, 모듈화에 쓰인다. string a; int main(){ cin >> a; //cin 입력 함수 cout 2023. 1. 18.
순열과 조합 순열이란? - 순열(permutation)이란 순서가 정해진 임의의 집합을 다른 순서로 섞는 연산 - ex) 1, 2, 3이렇게 있을 때 1, 3, 2 이런식으로 다른 순서로 섞는 연산을 순열이라고 한다. - n 개의 집합 중 n개를 고르는 순열의 개수는 n!이라는 특징을 가지고 있다 1, 2, 3 = 3 * 2 * 1 = 6 - nPr = n! / (n - r)! -> 3개중에 3개 = 6 / 1 = 6 2023. 1. 18.
재귀함수 재귀함수란? - 재귀함수(Recursion)는 정의 단계에서 자신을 재참조하는 함수 - 전달되는 상태인 매개변수가 달라질 뿐 똑같은 일을 하는 함수 - 큰 문제를 작은 부분문제로 나눠서 풀 때 사용한다. 주의사항 - 반드시 기저사례를 써야 한다. (종료조건) - 사이클이 있다면 쓰면 안된다. ex) f(a)가 f(b)를 호출한 뒤 f(b)가 다시 f(a)를 호출하는 것 - 반복문으로 될 거 같으면 반복문으로. (함수호출에 대한 코스트) # 예시 - 팩토리얼 n! : 그 이전의 항을 모두 곱하는 것. 곱한다는 행위의 반복? - 피보나치 : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 2023. 1. 18.
iterator 연산자 함수 구현 iterator 클래스를 통해서 연산자 오버로딩 *(역참조), ++, ==, != 구현해보기 *(역참조) 증가 연산자 ++ (전위) 실행하면 바로 증가하는것을 알 수 있다. 증가 연산사 ++ (후위) 비교연산자 == , != 2022. 8. 23.
vector(가변배열) iterator(반복자) 구현 class cArr 안의 iterator(inner class) 각각 별개 자료형 iterator begin 함수 생성자 오버로딩을 이용해서 축약해서 표현 할 수 있다. main함수 에서 begin 함수 실행 2022. 8. 16.
반복자(Iterator) C++ 반복자(Iterator) 자료구조 내에 데이터를 추가했을때(컨테이너 내에 데이터를 넣었을때) iterator 반복자를 이용해서 내부에 있는 데이터에 접근하고 순회할수 있게 하는 클래스 C++ 라이브러리는 반복자를 제공하는데 이것을 사용하면 라이브러리의 방식대로 자료구조를 액세스 할 수 있다. 따라서 라이브러리가 효과적으로 동작한다는 것을 보장 할 수 있다는 장점이 있다. 즉, 포인터와 상당히 비슷하며, 컨테이너에 저장되어 있는 원소들을 참조할 때 사용한다. 추상적으로 말하자면, 반복자란 컨테이너에 저장되어 있는 모든 원소들을 전체적으로 훑어 나갈 때 사용하는, 일종의 포인터와 비슷한 객체라고 할 수 있다. 알고리즘 마다 각기 다른 방식으로 컨테이너를 훑어가기 때문에, 반복자에도 여러가지 종류가 있.. 2022. 8. 16.
cout, cin, endl(연산자 오버로딩) 구현 cin cout istream 클래스 의 객체 ostream 클래스의 객체 직접 클래스를 만들어서 구현해 보기 2022. 8. 12.
연결형 리스트 구현 1. 연결형 리스트(Linked List) 란? 하나의 개체를 이루는 노드가 연결되어 리스트를 이루는 "자료구조" 를 말한다. 노드에는 값을 담고 있는 '데이터'와 다음 노드를 가리키는 '링크' 정보를 저장하고 있는 것이 기본이다. '데이터'에는 숫자, 문자열, 또다른 연결리스트 등 다양한 형식을 가질 수 있다. 일반적으로 리스트의 맨 앞 노드를 헤드(Head), 맨 마지막 노드를 테일(Tail)이라고 한다. 2. 배열과의 차이점 배열과 연결리스트는 언뜻 비슷해 보이나, 차이점은 분명히 있다. 배열은 메모리의 연속한 위치에 저장되고, 연결 리스트는 각 노드가 임의의 위치에 저장된다. 또한 배열은 특정 원소를 지칭하는 것이 인덱스를 활용하는 등으로 간편하나(O(1)), 연결 리스트는 선형 탐색을 하듯 한 .. 2022. 8. 12.
연산자 오버로딩 (operator) 연산자 오버로딩은 c++ 에서 제공하는 기본 타입이 아닌 클래스 타입(사용자 정의 자료형 타입)에도 연산자를 사용 할 수 있게 하는 문법이다. 중단점을 걸고 F10을 눌러보면 operator 함수로 넘어가는 것을 알 수 있다. 반환타입이 클래스명 + &인 이유는 c1 = c2 = c3; 중에 c2 = c3가 먼저 연산 되는데 만약 반환타입이 void면 c1 = ;만 남게 되기 때문에 리턴 값을 *this로 받아서 참조 해주어야한다. c2 = c3 결과 값이 c2로 c1 = c2의 결과 값이 c1으로 2022. 8. 8.