본문 바로가기
알고리즘/알고리즘풀면서...

C/C++ 팁

by 두둠칫 2020. 11. 4.

1. Compare함수

- priority_queue

struct comp{
	bool operator()(type a, type b){
    	return a > b;
    }
};
priority_queue<type, vector<type>, comp> pq;

pq의 비교 함수는 구조체로 구현할 수 있다.

pq는 heap 형태로써 a와 b는 각각 부모 노드, 현재 노드이며 조건에 맞을 시 교환이 이루어진다.(default : max heap)

(즉 예시는 현재 노드 b의 값이 부모 노드 a보다 작으면 교환이 이루어지는 형태로 min heap 구현 코드이다)

 

- sort

#include <algorithm>

...

bool comp(type a, type b){
	return a > b
}

...

sort(vector.begin(), vector.end(), comp);

algorithm 라이브러리 함수인 sort의 비교함수는 메서드로 구현할 수 있다.(default : 오름차순)

sort의 기본 정렬은 오름차순이며 예시의 comp함수는 내림차순으로 정렬하는 비교함수이다.

 

 

2. std::ios::sync_with_stdio(false);

<iostream> cin, cout은 C의 I/O 함수들과 동기화를 유지하는 작업이 추가로 들어가 있기 때문에 더 느리다.

 

이에 따라 std::ios::sync_with_stdio(false); 로 C의 I/O 함수들과 동기화를 꺼주면 빨라진다.

추가로 cin을 cout으로부터 untie 한다. stream을 tie하면 다른 stream에서 입출력요청이 오기전에 stream을 flush시킨다.

 

C의 I/O 함수들과 동기화를 하지 않기 때문에 다음을 주의한다.

1) scanf와 printf와 섞어서 사용하지 않기
2) 싱글 쓰레드 환경에서만 사용하기 

 

 

3. 출력 형식(소수점)

// ios::sync_with_stdio(0);
// cin.tie(0); 
cout << fixed;
cout.precision(2); // 소수 2자리까지 출력

출력 전 위와 같이 설정해둔다.

 

 

4. cstring vs string libraray

1) cstring == string.h

배열 기반으로 문자열을 저장, 문자열 마지막에 \0가 항상 삽입

자신의 크기를 알지 못한다(따라서 매번 strlen함수를 사용해서 구하는 것)

 

2) string

c의 문자열(cstring) 불편,문제점을 개선한 형태

 

참조

https://jhnyang.tistory.com/99

 

[C/C++]cstring vs string.h vs string 스트링클래스 차이(C-strings vs std::string)

[C언어, C++언어, JAVA언어 라이브러리 및 함수 메서드 링크 ] [C/C++] string은 문자열을 담는 클래스잖아요? 하지만 헤더를 '#include '이나 '#include '로 놓고 문자열을 출력해보면 빨간 줄!! 불가능하다

jhnyang.tistory.com

 

 

5. c++ split 구현

#include <string>
#include <vector>
#include <sstream>
#include <iostream>

using namespace std;

vector<string> split(string str, char Delimiter) {
    istringstream iss(str);
    string buffer;
 
    vector<string> result;
 
    // istringstream은 istream을 상속받으므로 getline을 사용할 수 있다.
    while (getline(iss, buffer, Delimiter)) {
        result.push_back(buffer);
    }
 
    return result;
}

'알고리즘 > 알고리즘풀면서...' 카테고리의 다른 글

다시 풀어볼만한 문제 모음  (1) 2021.10.03
최단경로 알고리즘 정리 : 다익스트라, 벨만포드, 플로이드-와샬  (0) 2021.08.29
구현 팁  (0) 2020.10.31
SQL 팁  (0) 2020.10.22
JAVA 팁(1)  (0) 2020.10.13