728x90
● 헤더
#include <bits/stdc++.h>
// 알고리즘 문제 풀이에 필요한 헤더 모음
참고 : https://miniolife.tistory.com/11
● 입출력 속도 향상
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// main문 시작에 위치
// 그러나 printf(), scanf(), put(), getchar() 와 같은
// C 스타일의 입출력을 쓰시면 안 됨
● 정수, 실수 자료형
int a; // (-20억 ~ +20억) 정수
long long b; // (-19자리 ~ +19자리) 정수
double c; // (-15자리 ~ +15자리) 실수
// 기본 → int
// int형 범위를 벗어나는 정수 → long long
// 나눗셈을 하는데 소수점이 필요한 경우 → double
참고 : http://melonicedlatte.com/algorithm/2018/03/04/022437.html
● 줄바꿈 "\n" 사용하기
cout << "\n";
// 사용하기
cout << endl;
// 버퍼를 비우는 작업까지 함으로 "시간초과" 결과가 나오므로 사용 지양
● 범위 기반 for문
int array[] = {1, 2, 3, 4, 5};
for(int a : array) { }
for(auto element : array) { }
// 배열의 원소를 가져올 때 사용
// 복사하여 가져오므로 기존 원소에 영향X
for(auto &element : array) { }
// 배열의 원소를 가져올 때 사용
// 참조하여 가져오므로 기존 원소에 영향O
● 배열 초기화 (fill, fill_n)
int arr[100] = {0, };
vector<int> v;
v.assign(50, 0);
// 시작 주소, 끝 주소, 바꿀 값
// 배열
fill(arr + 10, ar + 20, 1);
// 벡터
fill(v.begin(), v.end(), 2);
// 시작주소, 바꿀 원소 갯수, 바꿀 값
fill_n(arr, 100, 3);
// 결과 : fill, fill_n과 동일
// 차이점 : 매개변수
● 문자열 입력
string str;
cin >> str;
// 공백 미포함 문자열 입력
getline(cin, str);
// 공백 포함 문자열 입력
● 숫자 입력 -> 입력 버퍼 비우기 -> 공백있는 문자열 입력
string str;
int N;
// 방법1 : 숫자 입력 -> 입력 버퍼 비우기(ignore) -> 공백있는 문자열 입력
cin >> N;
cin.ignore();
getline(cin, str);
// 방법2 : 숫자 입력 -> 입력 버퍼 비우기(white space) -> 공백있는 문자열 입력
cin >> N >> ws;
getline(cin, str);
// cin 으로 입력 받으면 '\n'이 남는다
// getline으로 입력 받으면 '\n'이 남지 않는다
white space => (http://www.cplusplus.com/reference/istream/ws/)
● 문자열 → 숫자 (형변환)
string str;
stoi(str);
// int형으로 형변환
stol(str);
// long형으로 형변환
https://blockdmask.tistory.com/333
● 숫자 → 문자열 (형변환)
int N_int;
long long N_long;
double N_double;
to_string(N_int);
to_string(N_long);
to_string(N_double);
// to_string 함수가 오버로딩 되어있으므로
// 매개변수에 숫자(정수, 실수)를 입력하면 된다.
https://blockdmask.tistory.com/334
● 문자열 순회 + 자르기 - iterator
// 정방향으로 순회
string::iterator it;
for(it = str.begin(); it < str.end(); it++)
{
// 공백 기준으로 자르기
if(*it == ' ')
{
cout << "\n";
continue;
}
cout << *it << "\n";
}
// 역방향으로 순회
string::reverse_iterator rit;
for(rit = str.rbegin(); rit != str.rend(); rit++)
{
// 공백 기준으로 자르기
if(*rit == ' ')
{
cout << "\n";
continue;
}
cout << *rit << "\n";
}
// 또는
// string.substr(시작주소, 끝주소 + 1)
● 문자 검색 + 치환
// regex_replace.(대상 문자열, regex(정규식), 치환 문자열)
// 예시
s = regex_replace(s, regex("one"), "1");
s = regex_replace(s, regex("two"), "2");
s = regex_replace(s, regex("three"), "3");
● 문자열 대소문자 전환
string s1 = "ABCabc123###";
string s2 = "";
// 대문자를 소문자로 반환
for(int i = 0; i < 3; i++)
s1 += tolower(s1[i]);
// 소문자를 대문자로 반환
for(int i = 3; i < 6; i++)
s2 += toupper(s1[i]);
// 대소문자가 아닌 문자는 그대로 반환
for(int i = 6; i < 12; i++)
s2 += toupper(s1[i]);
// tolower도 동일
// s2 = "abcABC123###"
● <bitset> 10진수 → 2진수
#include <bitset>
// 10진수 → 2진수
int num = 123;
bitset<20> b (num);
// 2진수의 비트(1)수 반환
int cnt = b.count();
● 안정 정렬 stable_sort(v.begin(), v.end(), cmp)
#include <algorithm>
// sort는 불안정 정렬
// stable_sort는 안정 정렬
// sort 비교함수 인자에 &로 얕은 복사 선택
// stable_sort 비교함수 인자는 깊은 복사 필수
// 가져오는 위치는 (temp2 : 앞)(temp1 : 뒤)
bool cmp(int temp1, int temp2)
{
// 반환값이 true면 자리바꾸기
// 따라서 이건 내림차순
if(temp1 < temp2)
return true;
return false;
}
stable_sort(v.begin(), v.end());
stable_sort(v.begin(), v.end(), cmp);
● string의 find함수
string str = "Young and rich";
if (str.find("rich") != string::npos) {
cout << "rich is exist!";
int index = str.find("rich"); //해당 문자의 시작 인덱스 반환
}
● vector의 find함수
auto it = find(v.begin(), v.end(), num);
if(it == v.end())
cout << "배열에 존재하지 않습니다.\n";
else
{
cout << "배열에 존재합니다.\n";
cout << "index는 " << it - v.begin() << " 입니다.\n;
cout << "value는 " << *it << " 입니다.\n;
}
● 문자열 자르기 - istringstream
string str = "this,is,string";
istringstream iss(str);
string stringBuffer;
while (getline(iss, stringBuffer, ','))
cout << stringBuffer << " ";
// 또는 vector<string>에 담는다
// v.push_back(stringBuffer);
728x90
'Baekjoon > [정리] C++ 자료구조 및 꿀팁' 카테고리의 다른 글
[C++/자료구조] pair std (0) | 2021.07.27 |
---|---|
[C++/자료구조] deque std (0) | 2021.07.26 |
[C++/자료구조] queue std (0) | 2021.07.26 |
[C++/자료구조] list std (0) | 2021.07.26 |
[C++ 자료구조] vector std (0) | 2021.07.26 |
[C++ 자료구조] stack std (0) | 2021.07.23 |
댓글