그동안 써온 언어 JS의 node.js나 python은 build / compile 기능이 없다! 보통 node [파일명] / python [파일명] 명령어를 사용해서 실행시켰는데 요건 안에 이미 build를 자동으로 해주어서 !
C++ 로 간단한 기초 공부해보고 build 해서 리눅스에서 명령어 실행해보기
오늘 배운점
cin - 표준 입력 객체
Console Input 의 약자로 " 콘솔 입력"을 뜻한다.
cout처럼 객체로 존재하며, C의 scanf()라고 생각하면 된다.
C 언어에서 <stdio.h>
<stdio.h> = standard input / output library 표준 입출력 라이브러리
이와 같이 C++에서는 <iostream> = input / output stream
C 언어에서 입출력 담당 : printf(), scanf()
C++ 에서 입출력 담당 : std::cout , std::cin
std::란? -> 먼저 namespace에 대해 알아야함.
* namespace : 자신만의 이름을 사용할 수 있는 공간 (겹치는 변수 , 이름 등이 없도록)
std란 C++ 표준에서 정의한 'namespace' 중 하나이다.
iostream 헤더 파일에서 선언된 모든 이름은 std라는 공간 안에 있다는 것을 의미
=> 그래서 위에서 사용했을 때 std::cout << a~ 요로코롬 사용함.
만약 std:: 를 사용하고 싶지 않다면, 생략하고 싶다면 아래 명령어를 사용하면 된다.
using namespace std;
endl : standard end line : The endl is a predefined object of ostream class. It is used to insert a new line characters and flushes the stream.
cout << endl : Inserts a new line and flushes the stream cout << "\n" : Only inserts a new line.
C++ build / 실행 / 파일 불러오기 연숩
1. windows terminal 열기
wsl
mkdir workspace2
cd workspace2
mkdir helloworld && cd helloworld
code . // visual studio code 열림
질문1. code . 명령어가 어떻게, 왜 열리는지 궁금 !
2. Visual Studio Code 세팅
1) hello.cpp 파일 생성
2) C/C++ , Remote-WSL 다운
3. main 함수부터 코드 작성 시작
JS와 다른 점 :
1) 모든 함수 / 변수의 dataType 정확하게 필요 !
2) return 값이 없어도 무조건 return 작성
3) 코드 끝에 ; 세미콜론 필수
4) #include : 가져오기 명령어 in C++
5) 다른 파일 가져올 때 export 할 필요가 X -> 컴파일
3-1. 코드 작성
#include <iostream>
#include <string>
int main(){
std::cout << "hello C++" << std::endl;
return 0;
}
=
#include <iostream>
#include <string>
using namespace std;
int main(){
cout << "hello C++" << endl;
return 0;
}
질문 : vsc 터미널 창에 리눅스가 뜨는 이유 !? 저번에 학원에서는 안떴는데......
3-2. build & 디버깅 package 설치
* build 해주는 프로그램 설치 on Linux
* update먼저 실행
sudo apt-get update
sudo apt-get install build-essential gdb // build-essential & gdb 설치
// 설치 여부 확인
whereis g++ // build-essential - code building 해주는 패키지
whereis gdb // gdb - 디버깅용
3-3. bulid 하기
g++ -o hello hello.cpp // 명령어를 실행시키면 vsc 창에 "hello"라는 파일이 생성됨
ls //파일 생성 확인
cat hello // 외계어 나옴
./hello // 요렇게 파일 실행시켜야 내용이 나옴
build 명령어 분석
g++ -o hello hello.cpp
= g++ : build를 하겠다. hello.cpp 파일을 -o : out 해라 hello 라는 이름을 가진 build 파일로
= hello.cpp -------- g++ build --------> hello (바이너리파일)
4. printf("") 기능 사용해보기 from <stdio.h>
#include <stdio.h>
#include <string>
using namespace std;
int main(){
// cout << "hello C++" << endl;
printf("hello stdio.h");
return 0;
}
5. emily.h 파일 생성 후 hello.cpp 에서 사용해보기
emily.h 파일 생성 & 코드 작성
#include <iostream>
using namespace std;
int emily(){
cout << "hello emily" << endl;
return 0;
}
hello.cpp
#include <iostream>
#include <string>
#include "emily.h" // 파일 가져오기
using namespace std;
int main(){
emily();
// cout << "hello C++" << endl;
printf("hello stdio.h");
return 0;
}
파일 많아지고 build할 것도 많아지면 매번 build하기 귀찮 ! -> make 사용 !
5. C++ io 기본 입출력 코테 풀어보기
C++ 기초 알고리즘 풀어보기
백준 1000번 / 1330번 / 2439번 / 2908번 / 2164번 풀어보기
1. 백준 1000번 A+B
https://www.acmicpc.net/problem/1000
정답 코드
#include <iostream>
#include <string>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
return 0;
}
js 하다가 새로운 언어하니깐 신기하다........
2. 백준 1330번 - 두 수 비교하기 (if문 사용)
https://www.acmicpc.net/problem/1330
정답 코드
#include <iostream>
#include <string>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
if(a>b)
{
cout<<">"<<endl;
}
else if(a<b)
{
cout<<"<"<<endl;
}
else
{
cout<<"=="<<endl;
}
return 0;
}
JS 와 if(){} 요 부분이 같다
3. 백준 2439번
https://www.acmicpc.net/problem/2439
정답 코드
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin>>n;
for (int i=1; i<=n; i++)
{
for(int j=n; j>i; j--) cout<<" ";
for(int k=0; k<i; k++) cout<<"*";
cout<<"\n";
}
}
그냥 해보기 - 왼쪽부터 별찍기
#include <iostream>
// #include <stdio.h>
#include <string>
// #include "emily.h"
using namespace std;
int main(){
// emily();
// cout << "hello C++" << endl;
// printf("hello stdio.h"); //stdio.h 와 세트
int a;
cin>>a;
for(int i=1; i<=a; i++)
{
for(int j=1; j<=i; j++) {cout<<"*";}
cout<<"\n";
}
}
4. 백준 2908번
https://www.acmicpc.net/problem/2908
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main(){
string a,b;
int a_int, b_int;
cin >> a>> b;
reverse(a.begin(), a.end());
reverse(b.begin(), b.end());
a_int = stoi(a);
b_int = stoi(b);
if(a_int > b_int) cout<< a_int;
else cout << b_int;
return 0;
}
#include <algorithm> 을 쓰고 reverse() 가 가능 !
stoi() 는 문자열을 int로 바꾸는 함수
5. 백준 2164번
https://www.acmicpc.net/problem/2164
정답 코드
#include <iostream>
#include <string>
#include <algorithm>
#include <queue>
using namespace std;
int main(){
int n;
queue <int> q;
cin >> n;
for (int i=1; i<=n; i++){
q.push(i);
}
while(q.size()>1){
q.pop();
q.push(q.front());
q.pop(); // q.front()는 가져와지고 제거하진 않아서 pop으로 제거
}
cout << q.front() << endl;
return 0;
}
references:
https://blog.naver.com/mk5918/221676141890
'블록체인 기반 핀테크 및 응용 SW개발자 양성과정 일기' 카테고리의 다른 글
[124일차] basic C++ on Linux (0) | 2021.09.10 |
---|---|
[블록체인 이더리움] ERC-20 & ERC-721 / dApp / 스마트 컨트랙트란? (0) | 2021.09.09 |
[123일차] 블록체인 공개키 비밀키 만들기 (0) | 2021.09.09 |
[122일차] 블록체인 작업증명 Proof of Work (POW) (0) | 2021.09.08 |
[121일차] WebSocket ws로 Server 구현 (0) | 2021.09.07 |