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

🦥 설치 및 베이직

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

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

파일 내용 자세히 보기 ``` cpp #ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #endif // C++ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif ``` </details> # 2.첫번째 C++ 파일 만들기 내가 만들고 싶은 경로에 a.cpp 파일을 만들자 ``` 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)는 뜻이다. ``` bash g++ -std=c++14 -Wall a.cpp -o test.out ./test.out ``` # 예제로 이해하는 C++ ``` cpp #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 상수, 매크로를 정의할수 있다. ``` cpp #definde <이름> <값> ``` 상수 PI 값을 정의 하였고, for 반복문을 loop 라는 문자열로 치환한 것이다. ``` cpp #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 을 이용해 힙자료구조로 만든다. ### 이터레이터 추후 공부 예정 ### 펑터 펑터란 함수 호출 연산자를 오버로드 하는 클래스의 인스턴스를 말한다. **자세한 정리는 나중에! 지금은 간단하게 무슨 이론이다만 알고 넘어가자!**

Categories:

Updated:

Leave a comment