1. C++ 프로그램 설치 및 기본!

Hee Tae Shin·2023년 1월 7일
1

c++ 알고리즘

목록 보기
1/2
post-thumbnail

1. Mac 에서 시작하기

맥에서는 보통 xCode or vsCode 로 작업할 예정이다.. 나는 vsCode 로 할 것이다.

brew install gcc

bits/stdc++.h 사용

bits/stdc++.h 란?
C++ 의 표준 라이브러리가 모두 포함된 헤더이다!
iostream, csdio 등 여러 라이브러리에 있는 함수를 신경쓸 필요가 없어진다.

Mac 에서는 window의 Dev C++ 와는 달리 include 하려면 별도의 작업이 필요하다.

별도의 설정

cd/usr/local/include
mkdir bits 
cd bits
vi stdc++.h

여기서 만약에 Permission denied 가 뜬다면?

sudo mkdir bits

그리고 파일이 저장이 안된다?
그러면 그냥 따로 만들어서 넣어주자!

파일 내용 자세히 보기
  #ifndef _GLIBCXX_NO_ASSERT
  #include <cassert>
  #endif
  #include <cctype>
  #include <cerrno>
  #include <cfloat>
  #include <ciso646>
  #include <climits>
  #include <clocale>
  #include <cmath>
  #include <csetjmp>
  #include <csignal>
  #include <cstdarg>
  #include <cstddef>
  #include <cstdio>
  #include <cstdlib>
  #include <cstring>
  #include <ctime>

  #if __cplusplus >= 201103L
  #include <ccomplex>
  #include <cfenv>
  #include <cinttypes>
  #include <cstdbool>
  #include <cstdint>
  #include <ctgmath>
  #include <cwchar>
  #include <cwctype>
  #endif

  // C++
  #include <algorithm>
  #include <bitset>
  #include <complex>
  #include <deque>
  #include <exception>
  #include <fstream>
  #include <functional>
  #include <iomanip>
  #include <ios>
  #include <iosfwd>
  #include <iostream>
  #include <istream>
  #include <iterator>
  #include <limits>
  #include <list>
  #include <locale>
  #include <map>
  #include <memory>
  #include <new>
  #include <numeric>
  #include <ostream>
  #include <queue>
  #include <set>
  #include <sstream>
  #include <stack>
  #include <stdexcept>
  #include <streambuf>
  #include <string>
  #include <typeinfo>
  #include <utility>
  #include <valarray>
  #include <vector>

  #if __cplusplus >= 201103L
  #include <array>
  #include <atomic>
  #include <chrono>
  #include <condition_variable>
  #include <forward_list>
  #include <future>
  #include <initializer_list>
  #include <mutex>
  #include <random>
  #include <ratio>
  #include <regex>
  #include <scoped_allocator>
  #include <system_error>
  #include <thread>
  #include <tuple>
  #include <typeindex>
  #include <type_traits>
  #include <unordered_map>
  #include <unordered_set>
  #endif

2.첫번째 C++ 파일 만들기

내가 만들고 싶은 경로에 a.cpp 파일을 만들자

#include <bits/stdc++.h> 
using namespace std; 
int main() {
  cout << 1 << "\n";
  return 0;
}

다음의 명령어 실행!
a.cpp 라는 파일을 엄격하게(-wall) C++14버전으로 컴파일해서 test.out 라는 파일을 만든다.(-o test.out)는 뜻이다.

g++ -std=c++14 -Wall a.cpp -o test.out
./test.out

예제로 이해하는 C++

#include <bits/stdc++.h> // --- (1)
using namespace std;// --- (2)
string a;// --- (3)
int main(){
	cin >> a;// --- (4)
	cout << a << "\n";// --- (5)
	return 0; // - (6)
}

설명
(1) 헤더 파일을 include 포함시킨다. bits/stdc++.h 는 C++ 의 모든 표준 라이브러리 포함된 헤더파일!
(2) std 라는 네임스페이스를 사용한다. 네임스페이스란? 많은 라이브러리를 불러서 사용하다보면 변수명 중복이 생기는데, 이를 방지하기 위해 변수명에 범위를 걸어놓는 의미이다.
(3) 문자열 변수 a 선언, string 타입을 가진 a 라는 변수이다. 만약, string a = '안녕'; 이라고 한다면, a는 lvalue 라고 하고 안녕 은 rvalue 라고 한다. lvalue는 추후 다시 사용될 수 있는 변수이고, rvalue는 한번 쓰고 다시 사용되지 않는 변수이다.
(4) 변수 a 를 입력받는다. 대표적으로 cin, scanf 가 있다.
(5) 변수 a 를 출력한다. 대표적으로 cout, prinf 가 있다.
(6) main 함수를 종료시키는 return 0 이다. 프로세스를 정상적으로 마무리한다는 뜻, C++ 은 cpp 파일당 하나의 main 함수만 만들수 있다!

typedef

typedef는 타입의 이름을 새로 별칭으로 정의하는 것!
C++ 에서 이미 정의 된 타입 이나 사용자가 정의한 타입(struct or class)보다 더 짧게 지을수 있다.

define

상수, 매크로를 정의할수 있다.

#definde <이름> <값>

상수 PI 값을 정의 하였고, for 반복문을 loop 라는 문자열로 치환한 것이다.

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

STL

C++ 은 STL()을 제공하며 이는 자료구조, 함수 등을 제공하는 라이브러리이다. 알고리즘, 컨테이너, 이터레이터, 펑터 4가지 제공한다.

C++ 로 vector 의 자료구조를 쓴다거나 sort() 함수를 쓸 수 있는 것은 다 ~ STL 덕분이다.

알고리즘

정렬, 탐색 등에 관한 함수로 이루어져 있습니다. sort() 대표적이다.

컨테이너

시퀀스 컨테이너 - 데이터를 단순히 저장해 놓는 자료구조 (array, vector, deque, forward_list, list)가 있다.

연관 컨테이너 - 자료가 저장됨에 따라 자동정렬되는 자료구조를 말한다.
중복키가 가능한 가능한 것에는 이름이 multi 가 붙는다. set, map, multiset, multimap 이 있다.

정렬되지 않은 연관 컨테이너 - 자료가 저장됨에 따라 자동정렬이 되지 않는 자료구조를 말한다. unordered_set, unordered_map, unordered_multiset, unordered_multimap이 있다.

컨테이너 어댑터 - 시퀀스 컨테이너를 이용해 만든 자료구조이며, stack, queue 는 deque 로 만들어져있고 priority_queue는 vector 을 이용해 힙자료구조로 만든다.

이터레이터

추후 공부 예정

펑터

펑터란 함수 호출 연산자를 오버로드 하는 클래스의 인스턴스를 말한다.

자세한 정리는 나중에! 지금은 간단하게 무슨 이론이다만 알고 넘어가자!

profile
안녕하세요

0개의 댓글

관련 채용 정보