ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [코딩테스트, 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값으로 정렬하기
      1. map을 vector로 이동
      2. 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이면 숫자 아님
Designed by Tistory.