C++ 문법 정리

21stairs·2022년 6월 24일
2

C++

목록 보기
1/1

C++로 코딩테스트가 잡혀 급하게 공부한 내용을 정리해놔야겠다. 이걸 작성하는 지금은 코테가 끝났지만 다시 C++을 하게 될 수도 있으니까..

기계공학을 전공해서 그런지 제조업에서 근무하고싶은 마음이 크다. 근데 임베디드나 빅데이터와 거리가 먼 프론트엔드로 방향을 잡으면서 제조업으로의 취업이 멀어지는거 같다....ㅠ 이번에는 제조업으로 지원해서 C++로 코딩테스트를 준비하게됐다. C는 대학시절에 해봤지만 C++은 완전 처음.

내가 알던 C언어

#include <stdio.h>

int main(void) {
	int a;
	scanf("%d", &a);
    printf("%d", a);
	return 0;
}

조금 다른 C++

#include <iostream>

using namespace std;

int main() {
	int a;
    cin >> a;
    cout << a;
    return 0;
}

입출력부터 달라서 놀랬는데 이거 외에는 그렇게 다른건 없었다....😶

기본적인 문법

#include <iostream>

using namespace std;

int main() {
	// 조건문 if
    if (condition) {
    	...
    }
    else if (condition) {
    	...
    }
    else {
    	...
    }
    
    // 조건문 switch => 파이썬엔 없는디..
    switch (color)
    {
    	case "blue":
    		cout << "블룹니다.";
            break;
        case "red":
        	cout << "레듭니다.";
            break;
        default:
        	cout << "그 색이 없습니다.";
            break;
	}
    
    // 반복문 for
    for (int i = 0; i < len; i++) {
    	i가 len보다 작을때까지 반복
    }
    
    // 반복문 while 
    while (condition) {
    	조건이 참인 경우 반복
    }
    
    // 반복문 do while
    do {
    	일단 실행하고 조건을 검사함.
        선실행 후판단.
    }
    while (조건)
    
    // 삼항연산자 => 이거도 파이썬엔 없는디...
    condition ? 'true' : 'false';
}

코딩테스트에 유용한 자료구조와 함수

문자열 string

#include <string>으로 라이브러리를 임포트해준다.

#include <string>

int main() {
	string std;
    std = "Hello World";
	return 0;
}

내장 함수

  1. push_back, pop_back

    // 문자열 맨 뒤에 element를 추가시켜준다.
    str.push_back(__element);
    // 문자열 맨 뒤의 element를 삭제한다.
    str.pop_back();
  2. size, length

    // string의 사이즈를 반환한다.
    str.size();
    // string의 길이를 반환한다. size랑 항상 같은 값.
    str.length();
  3. empty

    // 빈 문자열인지 체크
    // return bool type
    str.empty();
  4. find

    // 찾고자하는 문자가 어디 인덱스에 있는지 
    // return index;
    // 두번째 인자는 몇번 인덱스부터 찾아줘. default는 0.
    // 없으면 -1을 반환함.
    str.find(__element, startIndex);
  5. substr

    // 부분 문자열로 잘라줘
    // return string type
    // 몇번 인덱스부터 몇개 잘라줘.
    str.substr(__startIndex, __number);
  6. clear

    // 싹 비워줘
    str.clear();
  7. front,back

    // 맨 뒷값이랑 맨 앞값 줘
    // return string type
    str.front();
    str.back();
  8. begin, end

    // 맨 앞 값과 뒷 값을 가르키는 반복자(iterator) 포인터를 반환한다.
    // 아주 특이한 놈.
    str.begin();
    str.end();

    => sort나 다른 함수에 넣을 때 쓰게 됨. 활용할 방법이 많은듯하다.

  9. erase

    // n번부터 m개 지워줘
    1. 인자가 1개이고, 숫자일때 => 이 뒤로 싹 지워줘
    str.erase(startIndex);
    
    2. 인자가 1개이고, 반복자일 때 => 이거 하나만 지워줘
    str.erase(iterator);
    
    3. 인자가 2개이고, 숫자일 때 => 여기서부터 몇개 지워줘
    str.erase(startIndex, size_type len);
    
    4. 인자가 2개이고, 반복자일 때 => 여기서부터 여기까지 지워줘
    str.erase(iterator start, iterator end);

vector

파이썬의 리스트처럼 동적 할당 자료구조.
#include <vector>로 선언하여 사용.

#include <vector>

int main() {
	// 선언
	vector<type> name;
    // 2차원으로도 선언 가능.
    vector<vector<type>> name;
    
    // m으로 초기화된 n개의 원소를 가지는 벡터를 생성.
    vector<int> vect(n, m);
    
	return 0;
    
}

내장함수

  1. push_back, pop_back
    string과 활용방법 동일
  2. at
    // 둘 다 인덱스에 접근하는 것이지만 at은 범위를 점검하고 들어가기 때문에 []보다 느리지만
    // at을 사용하면 런타임 에러가 아닌 out of range 예외를 발생시킴
    vect.at(index);
    vect[index];
  3. front, back
  4. clear
  5. begin, end
  6. size
  7. empty
  8. erase

그외 코딩테스트에 쓰는 유용한 라이브러리

0. iostream

iostream은 c++에서 입출력을 담당하는 라이브러리. cin, cout 등등

1. algorithm

#include <algorithm>
#include <functional> // greater, less 포함하고있음.

int main() {
	
    1. 정렬
    sort(arr, arr+n);
    sort(vect.begin(), vect.end()) // 처음부터 끝까지 오름차순 정렬
    sort(vect.begin(), vect.begin() + n) // 처음부터 n번째까지 정렬
    sort(vect.begin(), vect.end(), less<type>) // 처음부터 끝까지 오름차순(default) 정렬
    sort(vect.begin(), vect.end(), greater<type>) // 처음부터 끝까지 내림차순 정렬
    
    2. 최대, 최소
    max(a, b) 
    min(a, b) 
    *max_element(vect.begin(), vect.end()); // 원소중 가장 큰 값
    *min_element(vect.begin(), vect.end()); // 원소중 가장 큰 값
    // 활용 방법
    // 1. 가장 큰값의 인덱스가 알고싶을 때
    *max_element(vect.begin(), vect.end())-vect.begin();
    
    3. 탐색
    find(vect.begin(), vect.end(), element); // 이 범위에서 element를 찾아줘
    // element를 찾으면 해당 인덱스의 iterator을 반환하고,
    // 못찾았을 때는 마지막 인덱스의 iterator인 vect.end()를 반환한다.
    
	return 0;
    
    4. 순열 관련
    next_permutation();
    prev_permutation();
}

2. stack, queue

파이썬이랑 거의 동일

#include <stack>
#include <queue>

int main() {
	1. stack
    stack<type> st = { };
    st.top();
    st.push(element);
    st.pop();
    st.empty();
    st.size();
    swap(st1, st2);
    
    2. queue
    queue<type> q = { };
    q.front();
    q.back();
    q.push();
    q.pop();
    q.empty();
    q.size();
    swap(q1, q2);
}

3. numeric

#include <numeric>

int main() {
	
    accumulate(vect.begin(), vect.end()) // 모든 원소의 합을 알려줘
    
	return 0;
}

프로그래머스에서 문제풀기

프로그래머스에 제공하는 level 1 문제는 다 풀었다.

마무리하며

C++로 문제를 풀면서 파이썬이랑 차이점을 조금 아주 조금 느꼈다. 우선 파이썬에서 안되는 문자열의 요소를 바꾸는게 c++에선 됐지만 파이썬에서 제공하는 슬라이싱이나 swap같은 기능은 없었다. 그리고 c++ 코딩테스트는 내가 생각했던 Problem Solving이 아닌 개념에 대한 문제들이 많았다. 그래서 대학때 배웠던 c언어 기억을 짜내가며 풀었지만, 아무래도 얕은 지식이라 좋은 성적을 받진 못할거 같다. 언어자체에 대해 공부를 했어야 됐는데 아쉽다.....😢 못 푼 문제들에 대한 공부까지 마무리하면서 c++ 공부를 마쳐야겠다.

profile
velog보고 배우는게 많아 감사하는 마음에 쓰는 velog

0개의 댓글