티스토리 뷰
파이썬밀다가 왜 또 C++하냐고?? 그게...
내가 모빌리티쪽도 지원하다보니 어느 회사는 C++로 최소 한문제를 풀게시킨다...
심지어 C++는 내가 별로 안써본 언어라서 익히는데 더 걸릴 것 같다
x발... 이제 진짜 안바꿀거양.!!!!

* vscode에서 c++ 개발환경 구축은 https://webnautes.tistory.com/1158 참고
* C++ 기본은 https://boycoding.tistory.com/category/ 참고
표준 입출력
#include <iostream>
using namespace std;
int main() {
cout<<"Hello world"<<endl; //Common output(표준 출력) + end line(줄바꿈, 출력 버퍼 비움)
cout<<"Hello world\n" //출력 자체는 같음
int a; //자료형 추가 선언 필요, 초기화가 필수는 아님.
cin>>a; //Common input(표준 입력)
cout<<"value : " << a << endl;
return 0;
}
1. iostream은 cout와 endl 표준 입출력 포함 헤더
2. std 라이브러리에 포함된 내용을 사용함을 선언 (이로 인해 iostream 헤더가 아닌 객체를 포함시켰음에도 std 라이브러리 소속임을 안적어도 되는 것) 이를 사용하지 않았다면 std::를 앞에 붙여줘야함
3. char형 변수에서 cin에 여러 값이 들어가는 경우, char는 한자리씩 처리하기 때문에 앞자리가 처리된 후, 나머지 값은 입력 버퍼에 남아있다가 cin 호출시마다 버퍼에 있던 한자리씩 처리된다.
함수
int plusFunc(int a, int b); //Forward declaration
int main() {
cout << plusFunc(2, 3) << endl;
return 0;
}
int plusFunc(int a, int b) {
return a+b;
}
void형도 가능하고... 큰 차이 없음 main에서 바로 갖다쓰면 된다. 전방 선언 필요
매크로
#define MY_PHONE_NUMBER 01011112222
전처리기가 MY_PHONE_NUMBER를 발견하면, 이는 01011112222라는 텍스트로 대체
조건부 컴파일
#define A
#ifdef A
cout << "A is defined." << endl; //출력
#endif
#ifdef B
cout << "B is defined." << endl; //무시
#endif
#ifndef A
cout << "A is undefined." << endl; //무시
#endif
#ifndef B
cout << "B is undefined." << endl; //출력
#endif
ifdef : 해당 값이 이전에 정의되었다면 ok
ifndef : 해당 값이 이전에 정의되지 않았다면 ok
#ifndef A_H
#define A_H
// code here
#endif
이는 헤더파일이 중복되지 않도록 확인하는 헤더가드 기능에 사용됨. 이는 #pragma once 한 줄로 대체되긴 한다.
변수,상수 정의 디테일
//ㅇㅋㅇㅋ
int a,b;
int a=1, b=2, c=3;
int a(1), b(2), c(3); //직접 선언
const double gravity{9.8}; //상수 double gravity 선언. 변경 불가. 초기화 필수.
//아래처럼 하지마시오!!
int a, int b;
int a,b = 1;
//문자와 숫자
char chA('a') //ASCII code 'a'인 '97'으로 초기화된다.
char chFIVE('5'); //ASCII code '5'인 '53'으로 초기화된다.
cout << chA << chFIVE //정수가 입력되어도 해당 ASCII code 문자로 출력 : a5
//부동소수점 리터럴 선언 추가 유형
double electron = 1.6e-19; //1.6 x 10^-19
//8진수, 16진수 리터럴
int x = 012; //8진수 12로 선언하여 저장되므로, 8진법 12에 해당하는 10진법 10이 저장
int y = 0xF; //16진수 F로 선언하여 저장되므로, 16진법 F에 해당하는 10진법 15가 저장
연산 관련
cout << 9/5; // 1
정수 나누기 정수는 정수나옴
조건문
if(expression) {
cout << "TRUE" << endl;
}
else if(expression) {
cout << "IDK" << endl;
}
else {
cout << "FALSE" << endl;
}
형 변환
char ch(97);
cout << static_cast<int>(ch) << endl;
그냥 ch를 출력하면 ASCII code로 대응되어 a가 출력되지만, int형변환을 하여 97이 출력된다.
static_cast는 범위검사를 하지 않기 때문에 overflow등에 직접 대응해야 함.
Escape sequences
| Symbol | Meaning |
| \n | 줄바꿈 |
| \t | 탭 |
| \', \", \? | 각각 ', ", ? |
| (number) | 해당값을 8진수로 출력 |
| \x(number) | 해당값을 16진수로 출력 |
최대 최소
#include <iostream>
#include <algorithm>
using namespace std;
int a = 5;
int b = 7;
cout << max(a,b); //7
cout << min(a,b); //5
algorithm 헤더 필요
문자열
1. 선언
#include <string>
string str1 = "abc";
string str2("abcde");
2. 접근
string test("MegaCoffee");
test[1]; //index 1인 e 반환
test.at(2); //index 2인 g 반환
test.front(); //맨 앞 M 반환
test.back(); //맨 뒤 e 반환
3. 크기
string test("MegaCoffee");
test.length();
test.size(); //둘다 10 반환. 빈 문자열의 경우 0 반환
test.empty(); //size, length 기준. 안비어있으므로 false 반환
test.clear(); //test에 들어있는 문자열을 지움.
test.empty(); //비어있으므로 true 반환
4. 자르기, 수정하기
string test("MegaCoffee");
test.substr(0,4);
//index 0부터 4 length만큼 잘라서 반환. Mega를 반환한다.
test.replace(4,6,"Byte");
//index 4부터 6 length만큼을 "Byte"로 대체. test는 MegaByte가 된다.
test.copy(strArr,6,4);
//index 4부터 6 length만큼을 복사해 strArr에 저장. Coffee가 저장된다. 반환값은 길이인 6.
test.push_back("x");
//문자열의 맨 뒤에 char인 x를 더함. MegaCoffeex가 된다.
test.pop_back();
//문자열의 맨 뒤 char 하나를 pop. x가 다시 지워져서 MegaCoffee가 된다.
5. 비교하기
string test("MegaCoffee");
string test1("GigaCoffee");
string test2("MegaCoffee");
test.compare(test1);
//MegaCoffee와 GigaCoffee를 사전순 기준으로 비교. 사전상 M보다 G가 더 앞서있기 때문에 양수 반환
test.compare(test2);
//두 문자열이 같다면 0 반환
test.find("Coffee");
//Coffee가 test 문자열 중 일치하는 게 있는지 확인. 일치한다면 일치하는 부분의 첫번째 index 반환.
//두번째 매개변수로 어느 index부터 찾기를 시작할지 지정해줄 수 있다.
배열
bool student[30];
fill_n(student,30,false);
int length = sizeof(student)/sizeof(bool); //배열의 길이
#include <array>
int length = student.size(); //array 헤더 사용 방식
cout << student.at(1) //index 1에 위치한 값 반환(<array> 필요)
한번에 초기화하는 방법은 std::fill_n(배열이름,크기,값);
형변환
// char to int
char A = '10';
int B = A - '0' //10
정렬
#include <algorithm>
#include <vector>
vector<int> a = {9, 3, 5, 4, 1, 10, 8, 6, 7, 2};
sort(a.begin(),a.end()); //시작점 주소~마지막 주소+1, 기본적으로 오름차순
#include <functional>
sort(a.begin(),a.end(),greater<>()); //내림차순 정렬
범위 기반 for문
int a[5] = {1,2,3,4,5};
for(int i : a) {
cout << i << endl;
}
// int형 배열 a에서 각 값을 i로 지정. 복사형을 받으므로 이 자체로는 a를 변경할 수 없다.
for(int& i : a) {
i = 1;
}
// 참조형으로 변경하면 값 변경이 가능해진다.
#include <vector>
vector<int> v = {1,2,3,4,5};
for(auto i : v) {
cout << i << endl;
}
// vector, list와 같은 타입도 위와같이 사용 가능.
auto?
변수의 자료형을 자동으로 추론해주는 키워드.
자료형 대신 auto를 사용
vector
#include <vector>
vector<value_type> v;
vector<int> v(5,2); // 2 2 2 2 2
v.assign(5,2); // 2 2 2 2 2
vector<int> v2(v1); //v1에서 v2로 벡터 복사
v.push_back(1); //마지막 원소 뒤에 1 삽입
v.pop_back(); //마지막 원소 제거
v.begin(); //첫번재 원소 가리킴
v.end(); //마지막 원소+1 가리킴
v.size(); //원소의 개수 반환
v.insert(1,2,3); //index 1부터 2개의 3을 삽입
v.insert(1,2); //index 1에 2 삽입
'■ 알고리즘 > ◻ 개념' 카테고리의 다른 글
| 힙(Heap)에 대한 간략정리와 C++ 관련 라이브러리 및 함수 (0) | 2022.11.23 |
|---|---|
| 해시(Hash) 간단하게 정리 (0) | 2022.11.08 |
| 정렬의 종류 및 C++으로 구현하기 (0) | 2022.10.26 |
| 파이썬 재활 (0) | 2022.08.11 |
| C언어 기억 안났던것들 정리 (0) | 2021.09.06 |