[알고리즘/C++/C] 알고리즘을 위한 C++

SHark·2023년 2월 17일
0

알고리즘

목록 보기
3/20

C++과 같은 Managed Language(메모리를 직접 다루는 언어)를 안한지 너무 오래되서, C++에 대한 특성과 C++의 포인터, 구조체, 클래스 , I/O ,함수 5가지 정도는 가볍게 정리할 예정이다. ( JS, Python 같은 동적언어를 하다보니 , 어느새 머리속에서 C++과 같은 언어는 멀어져버렸다.)

알고리즘은 기본적인 입출력 문제를 풀 것 같다. Third Party API로 최근에 C++ Header 파일을 분석할 일도 있었고 해서 Remind를 빠르게 할 예정이다.
(정리해놓고 나중에 두고두고 봐야지)

자료형

C++언어의 자료형에는 정수형, 실수형 2가지 밖에 없다.

정수형

Char - 문자(Character)를 표시할 때 사용됩니다.(정수형입니다. ASCII코드 값인걸로 압니다)
bool - True,False를 나타낼 때 쓰는 값입니다. 0/1로 True,false를 나타내기 때문에 정수형입니다. 하지만, Boolean값은 true,false의 "의미"를 나타내기 때문에 참/거짓을 나타내는 값이라면 bool 자료형을 쓰는게 좋을거 같습니다. (0/1로 참/거짓을 나타내는게 절대 틀린건 아닙니다!)

숫자

short - 2byte의 범위의 정수를 나타냅니다.
int - (integer)4byte로 정수를 나타냅니다.
long - 4byte로 정수를 나타냅니다. 운영체제에 따라, 8byte일 수 있습니다.
__int64 - 8byte 정수를 나타냅니다.

실수형

float - 4byte크기의 실수를 나타냅니다.
double - 8byte크기의 실수를 나타냅니다.
long double -8byte 이상크기의 실수를 나타냅니다.

  • unsigned - 양수 값만 표현, 양수 값 표현 범위가 2배가 된다. int,short 등 앞에 추가로 붙일 수 있다. unsigned int , unsigned short ...등

I/O

헤더파일
include <iostream> (표준 입출력 헤더파일)
include <bits/stdc++.h> (교육용 입출력 헤더 , 표준 입출력과 STL, Algorithm들이 모여있다.

Cpp 입력함수

cin

  • 개행문자까지 입력을 받습니다.
  • 받을 변수의 Type을 그대로 따라갑니다. 따라서, 형식지정자를 따로 또 써주지 않아도 됩니다.
  • C언어의 입출력 방식(scanf,printf)보다는 무겁습니다만, 대부분의 상황에서는 cin을 써도 무방합니다.
	#include<bits/stdc++.h>
    using namespace std;
    int main(){
    	string a;
        cin >> a;
        cout << a << '\n';
    	return 0;
    }

안녕하세요 바보 라고 입력했지만, 개행문자 앞까지인 안녕하세요까지 입력이 되었습니다.

scanf

  • 받을 변수에 따라, 형식지정자를 정해주고, 변수의 주소값에 저장하는 형식입니다.
  • Cpp의 입출력방식보다 빠릅니다만, 형식지정자를 정의해줘야하는 번거러움이 있습니다.
  • %dint , %lfdouble , %cchar타입을 받습니다.
	#include <bits/stdc++.h>
	using namespace std;
	int main()
    {
      char a[20];
      scanf("%s", &a);
      printf("%s \n", a);
      return 0;
    }

getline

  • 스페이스바를 포함해서, "한 줄"을 받는 의미입니다. 띄어쓰기의 개념이 있기 때문에, 문자열을 통째로 입력받고싶을 때, 사용합니다.
  • 하지만, 문제를 풀다보면 특정 횟수가 입력되고 ,한 줄을 여러번 받아야할 상황이 있습니다. (여러 줄을 받아야하는 상황)
  • 이때, cin과 getline을 같이 사용해야할 상황이 오는데, 이때 입력버퍼를 한번 비워줄 필요가 있습니다. 왜냐하면, cin은 개행문자를 끝으로 입력받아오는데, 버퍼에 그대로 남아있기 때문입니다.
	#include <bits/stdc++.h>
using namespace std;

int main()
{
  int T;
  string s;
  cin >> T;
  getline(cin, s);
  return 0;
}

입력버퍼

C++은 입력버퍼를 자체적으로 갖고있습니다. 입력버퍼를 사용하는 이유는 효율적이기 때문입니다.

  • 문자를 한꺼번에 전송하므로, 전송시간이 적게 걸립니다.
  • 시스템 콜을 줄여줍니다.(모니터 출력 , 프로그램 전송 등은 OS가 담당하기 때문)
  • 중간에 수정이 가능합니다. ( 백 스페이스 기능 )

이 버퍼를 비우는 과정을 Flush라고 합니다.

Cpp 출력함수

cout

  • C++의 출력함수입니다.
  • cout << 출력할 것 <<'\n' 와 같이 사용합니다. 여러개를 출력하고 싶다면, cout << a << b << c ...와 같이 뒤에 << 기호를 연달아 사용하면 됩니다.
  • 형식지정자가 없습니다.
  • 이때, ~~자릿수까지 출력이라는 문제가 가끔 있는데, 그때는 precision함수를 이용해줍니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
	int a = 5;
    double b = 3.141592;
    string str1 = "Hello";
	cout << a << b << str1 ;
	return 0;
}

printf

  • C언어의 표준출력함수입니다.
  • 형식지정자를 사용합니다. cout보다는 빠른특징이 있습니다.
#include<bits/stdc++.h>
using namespace std;
int main(){
	int a = 5;
    double b =5.123;
    char words[20] = "Hello World!";
	printf("정수: %d 실수:%lf 문자열:%s",a,b,&words)
	return 0;
}

매크로, 상수 ,typedef

#define을 통해, 상수나 매크로를 정의 할 수 있습니다. 가독성을 높여주고, 코드를 깔끔하게 짤 수 있습니다. 특히, 매크로는 코드의 양을 줄일 수 있는 좋은 기능 중 하나입니다.

#include<bits/stdc++.h>
using namespace std;
#define loop(x,n) for(int x=0; x < n ; x++)
#define Author "Shark"
 
int main(){
	cout<< Author <<'\n';
	int sum=0;
    loop(i,10){
    	sum +=i;
    }
    cout<< sum << "\n" ;
    return 0;
}

typedef

typedef는 타입의 이름을 새롭게 짓는 별칭 기능입니다(Alias 기능).
사용자 정의한 타입(클래스, 구조체를 더 의미있는 이름으로 지어줄 수 있습니다.

0개의 댓글