-
[코딩테스트, C++] C++ STL 문법 정리코딩테스트 2021. 12. 20. 01:58
입출력
#inlcude <stdio.h> // <cstdio> #include <iostream> using namespace std; scanf(); printf(); cin >> temp; cout << "Hello" << temp << endl;
코테 시작 코드
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <vector> #include <algorithm> #include <set> #include <iostream> #include <cmath> #include <stdlib.h> #include <string> using namespace std; int main(int argc, char* argv[]) { }
Pair
두 가지 자료형을 하나의 쌍으로 묶을 수 있다.
#inlcude <vector> // <algorithms> // pair 선언 pair<int, char> p; // pair 접근 scanf("%d %c", &p.first, &p.second); // pair 만들기 함수 p = make_pair(3, 'b');
Vector
크기가 가변적인 배열이다.
- front() : 첫 번째 원소
- back() : 마지막 원소
- begin() : 첫 번째 위치
- end() : 마지막 위치
- push_back() : 마지막에 데이터 추가
- pop_back() : 마지막에 데이터 제거
- size() : 원소의 개수
- erase() : erase(v.begin()) ⇒ 첫 번째 원소 제거
- clear() : 비우기
- reverse(v.begin(), v.end()) ⇒ string도 reverse가 됨
#include <vector> #include <algorithm> int main(int argc, char *argv[]) { vector<int> v1 = {1, 2, 3}; vector<pair<int,char>> v2; // vector<pair<int,string>> v2 v1.pushback(4); // v1.front(), v1.back(), v1.back(), v1.begin(), v1.end() v1.popback(); // v1.size() v2.pushback(make_pair(1,'a')) // pair로 벡터 선언 가능 }
- vector를 2차원배열처럼.
#inlcude <vector> int main(int argec, char *argv[]) { vector<vector<int>> v; vector<int> tv; for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) { int temp; scanf("%d", &temp); tv.push_back(temp); } v.push_back(tv); tv.clear(); } }
- 정적 vector 선언 및 0초기화
#inlcude <vector> int main(int argec, char *argv[]) { int n; cin>>n; vector<int> v(n); // n개 길이의 벡터 선언, 자동으로 0으로 채워짐 vector<vector<int>> v2(vector<int>(n, 0)); // 2차원벡터 0 초기화 for (int i = 0; i < n; i++) { cout << ch[i] << " "; } }
Queue
큐 자료구조
- push() : 데이터 추가
- pop() : 처음의 데이터 뽑기
- front() : 첫 번째 원소
- back() : 마지막 원소
- size() : 큐의 크기
- empty() : 큐가 비었는지 확인
#inlcude <queue> int main(int argec, char *argv[]) { queue<int> q1; queue<pair<int,char>> q2; q1.push(4); q1.pop(); q2.push(make_pair(1,'a')) }
- pair를 원소로 가지는 queue의 접근
#inlcude <queue> int main(int argec, char *argv[]) { queue<pair<int,int>> q; q.push(make_pair(0,0)); int x = q.front().first; int y = q.front().second; q.pop(); }
Stack
스택 자료구조
- push() : top에 데이터 추가
- pop() : top의 데이터 뽑기
- top() : top의 원소
- size() : 스택의 크기
- empty() : 스택이 비었는지 확인
#inlcude <stack> int main(int argec, char *argv[]) { stack<int> s1; stack<pair<int,char>> s2; s1.push(4); s1.pop(); s2.push(make_pair(1,'a')) }
Set
key라고 불리는 원소들의 집합 중복이 허용되지 않음
- insert() : 원소 삽입
- begin() : 첫 번째 원소를 가르키는 iterator를 반환
- end() : 마지막 원소를 가리키는 iterator를 반환
- find(k) : 원소 k를 가리키는 iterator를 반환
- size() : set의 원소 수
- empty() : 비었는지 확인
#include <iostream> #include <cstdio> #include <set> using namespace std; int main(int argc, const char * argv[]) { set<int> s1; s1.insert(1); s1.insert(2); s1.insert(6); s1.insert(5); s1.insert(4); s1.insert(3); set<int>::iterator it; for (it = s1.begin(); it != s1.end(); it++) { printf("%d ", *it); } printf("\\n"); it = s1.find(7); printf("%d\\n", *it); it = s1.find(6); printf("%d\\n", *it); }
Map
<key, value> 쌍으로 저장하는 자료구조, 중복이 허용되지 않으며 자동으로 오름차순 정렬
- insert(make_pair(k,v)) : 원소 삽입
- erase(k) : key값 k를 갖는 원소를 삭제
- begin() : 첫 번째 원소를 가리키는 iterator를 반환
- end() : 마지막 원소를 가리키는 iterator를 반환
- find() : map의 원소 수
- empty() : 비었는지 확인
#include <iostream> #include <cstdio> #include <map> using namespace std; int main(int argc, const char * argv[]) { map<char, int> m1; m1.insert(make_pair('a', 1)); m1.insert(make_pair('e', 5)); m1.insert(make_pair('c', 3)); m1.insert(make_pair('d', 4)); m1.insert(make_pair('b', 2)); m1['e'] = 6; m1['f'] = 7; map<char, int>::iterator it; for (it = m1.begin(); it != m1.end(); it++) { printf("<%c %d> ", (*it).first, (*it).second); } printf("\\n"); it = m1.find('c'); printf("%d\\n", (*it).second); it = m1.find('d'); printf("%d\\n", (*it).second); m1.erase('a'); m1.erase('c'); for (it = m1.begin(); it != m1.end(); it++) { printf("<%c %d> ", (*it).first, (*it).second); } printf("\\n"); }
Sort
C++의 algorithm 헤더에 포함되어 있다.
- sort(first, last) : 오름차순 정렬
#include<iostream> #include<algorithm> using namespace std; int main(){ // 배열의 크기가 10인 정렬되지 않은 배열 int arr[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2}; vector<int> v ... // 벡터에 값 넣기 sort(v.begin(), v.end()) // sort() 함수에 정렬할 배열의 범위를 지정 sort(arr, arr + 10); // --> sort() 함수가 실행되고 나면 arr 배열의 정렬 완료! for(int i = 0 ; i < 10 ; i++){ cout<<arr[i]<<' '; } }
- sort(first, last, compare) : 내림차순 정렬
#include<iostream> #include<algorithm> using namespace std; /* 두 수인 a와 b가 있을 때 a가 더 클 경우 true를 반환하는 함수 */ bool compare(int a, int b){ return a > b; } int main(){ int arr[10] = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2}; // sort() 함수에 정렬 기준을 담은 함수 추가 sort(arr, arr + 10, compare); for(int i = 0 ; i < 10 ; i++){ cout<<arr[i]<<' '; } }
- Map을 value값으로 정렬하기
- map을 vector로 이동
- vector를 second 기준으로 정렬
#include<iostream> #include<algorithm> #include<map> #include<vector> using namespace std; bool compare(int a, int b){ if (a.second == b.second) return a.first < b.first; return a.second < b.second; } int main(){ map<int, int> m; ... // m 세팅 for (auto num : m) { cout << "key: " << num.first << " | value: " << num.second << "\\n"; } vector<pp> vec( m.begin(), m.end() ); sort(vec.begin(), vec.end(), compare); // vector<pair<int,int>> vec( m.begin(), m.end() ); for (auto num : vec) { cout << "key: "<< num.first << " | value: " << num.second << "\\n"; } }
문자열 다루기
- #include <string> 헤더 포함
- string str = "";
- string 자료형은 '==' 비교 가능
#define _CRT_SECURE_NO_WARNINGS #include <string> using namespace std; string isReverse(string str) { string temp = ""; for (int i = str.size() - 1; i >= 0; i--) { temp = temp + str[i]; // +연산도 가능하다. } return temp; } int main(int argc, char* argv[]) { string str = ""; cin >> str; // 문자열 입력받기 transform(str.cbegin(), str.cend(), str.begin(), tolower); // 소문자로 변경 transform(str.cbegin(), str.cend(), str.begin(), toupper); // 대문자로 변경 }
기타 함수
- int isdigit(char c) : 0이면 숫자 아님
'코딩테스트' 카테고리의 다른 글
[코딩테스트, C++] 코딩테스트를 위한 C++ 기본 템플릿 (0) 2021.12.20 [코딩테스트 , Python] 파이썬 코딩테스트 문법 정리 (0) 2021.12.20 [코딩테스트, Java] 자바 코딩테스트 문법 정리 (0) 2021.12.20