[C++] 자주 사용되는 문법
반복문
For
for(초기식;조건식;증감식)
{
// 구현내용
}
초기식, 조건식, 증감식은 생략 가능
생략 시 구현과정에서 빠져나올 수 있도록 해야한다.
while
while(조건식)
{
// 구현 내용
}
조건식이 참일 경우 실행한다.
do ~ while
do
{
// 구현 내용
} while (조건식)
조건식과 관계없이 최소 한 번은 실행 후 반복 조건을 검사한다.
선택
switch
switch ( 기준값 )
{
case 선택값:
// 이 값일 때 구현 내용
break;
case 선택값:
// 이 값일 때 구현 내용
break;
default:
// 그 외 나머지
}
선택값을 차례대로 보면서 기준값에 해당하는 구현내용을 실행한다.
break; 명령이 없을 경우 다음 case의 구현내용도 실행하므로 주의가 필요하다.
기준값에 해당하는 비교값들이 없을 경우 default 안에있는 구현 내용을 실행한다.
문자열
#include<cstring>
> strcmp(a, b) 문자열 비교
> strlen(str) 문자열 길이
> strcpy() 문자열 복사
#include<cstring>
char str[10];
char str2[10];
cin >> str; // 한 단어 읽기
cin.getline(str, 10); // 한 줄 읽기 (띄어쓰기 무시)
cin.get(str, 10); // 공백 취급
cin.getline(str2, 100, '\n'); // 공백포함입력
// cin.getline(char buf[], int size, char delimitChar);
if(strcmp(str, str2) == 0) // 문자열 비교
#include<string>
#include<string>
string str;
string str2;
cin >> str; // 문자열 입력
getline(cin, str) // 문자열 입력
getline(str, ','); // char가 있는 곳 까지 읽고 char은 포함하지 않음
str.size();
str.length();
int index = str.find("aa"); // aa가 있는 인덱스를 리턴, 없으면 npos(-1)리턴
if(str1 < str2) 아스키 코드 값 기준
str.clear()
to_string(int) // 문자열로 변경
string to int, double, float, long // 문자열을 숫자로
stoi, stod, stof, stol
// 문자열 슬라이싱
str.substr(n) // n번 인덱스 부터 끝까지 string으로 변환
str.substr(n, m) // n번 인덱스 부터 m번 인덱스까지 string으로 변환
// 문자열 추가
str += "aaa";
str.append("abc");
// 문자열 복사
size_type copy(charT* s, size_type len, size_type pos = 0) const;
str.copy(str2, 3, 1) // str2의 1번 부터 3개 복사
// 문자열 바꾸기
str.swap(str2);
배열
array
int* arr = new int[10]; // 동적 메모리 할당
delete[] arr; // C에서의 free와 동일
리스트
list
#include<list>
list<int> datas;
datas.push_back(5);
datas.pop_back();
datas.push_front(5);
datas.pop_front();
datas.size();
datas.empty();
datas.front();
datas.back();
datas.insert(iterator, 1);
datas.erase(iterator);
STL
pair, vector, queue, stack, set, map, priority queue
pair
// vector나 algorithm 헤더 파일에 포함
#include <vector>
pair<int, char> p;
p.first = 1;
p.second = 'a';
vector
front() : 첫 번째 원소
back() : 마지막 원소
begin() : 첫번째 위치
end() : 마지막의 다음 위치
push_back() : 마지막에 데이터 추가
pop_back() : 마지막에서 데이터 뽑기
size() : 원소의 개수
clear() : 비우기
erase() : erase(v.begin()) ⇒ 첫 번째 원소 제거
reverse() : reverse(v.begin(), v.end()) ⇒ string도 reverse가 됨
#include <vector>
vector<int> v1 = {1, 2, 3};
vector<vector<int>> v; // 2차원 배열처럼
v1.push_back(5);
for (int i=0; i < v1.size(); i++) {
cout << v1[i];
}
Queue
- push() : 데이터 추가
- pop() : 처음의 데이터 뽑기
- front() : 첫 번째 원소
- back() : 마지막 원소
- size() : 큐의 크기
- empty() : 큐가 비었는지 확인
#inlcude <queue>
queue<int> q1;
queue<pair<int,char>> q2;
q1.push(4);
q1.pop();
q2.push(make_pair(1,'a'))
Stack
- push() : top에 데이터 추가
- pop() : top의 데이터 뽑기
- top() : top의 원소
- size() : 스택의 크기
- empty() : 스택이 비었는지 확인
#inlcude <stack>
int main(int argec, char *argv[]) {
stack<int> s1;
stack<pair<int,char>> s2;
s1.push(4);
s1.pop();
s2.push(make_pair(1,'a'))
}
Set
key라고 불리는 원소들의 집합 중복이 허용되지 않음
- insert() : 원소 삽입
- begin() : 첫 번째 원소를 가르키는 iterator를 반환
- end() : 마지막 원소를 가리키는 iterator를 반환
- find(k) : 원소 k를 가리키는 iterator를 반환
- size() : set의 원소 수
- empty() : 비었는지 확인
#include <set>
int main(int argc, const char * argv[]) {
set<int> s1;
s1.insert(1);
set<int>::iterator it;
for (it = s1.begin(); it != s1.end(); it++)
{
printf("%d ", *it);
}
it = s1.find(7);
}
Map
<key, value> 쌍으로 저장하는 자료구조, 중복이 허용되지 않으며 자동으로 오름차순 정렬
- insert(make_pair(k,v)) : 원소 삽입
- erase(k) : key값 k를 갖는 원소를 삭제
- begin() : 첫 번째 원소를 가리키는 iterator를 반환
- end() : 마지막 원소를 가리키는 iterator를 반환
- find() : map의 원소 수
- empty() : 비었는지 확인
#include <map>
int main(int argc, const char * argv[]) {
map<char, int> m1;
m1.insert(make_pair('a', 1));
map<char, int>::iterator it;
for (it = m1.begin(); it != m1.end(); it++) {
printf("<%c %d> ", (*it).first, (*it).second);
}
it = m1.find('c');
}
Sort
C++의 algorithm 헤더에 포함되어 있다.
- sort(first, last) : 오름차순 정렬
- sort(first, last, compare) : 내림차순 정렬
#include<algorithm>
bool compare(int a, int b){
return a > b;
}
sort(v.begin(), v.end())
sort(arr, arr + 10, compare);
'Programming > C, C++' 카테고리의 다른 글
C++ 유용한 문법 (0) | 2023.09.16 |
---|---|
C++ 최대 값, 최소 값 (max_element, min_element) (0) | 2023.09.15 |
C++ Static 정적 클래스, 정적 멤버, static 변수, static함수 (0) | 2022.12.20 |
C++ 구조체와 클래스의 코드로보는 차이점 (0) | 2022.12.20 |
C++ 바이트 패딩 (Byte Padding) (0) | 2022.12.14 |