250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- livedata
- android
- tabbar
- 앱
- Kotlin
- 안드로이드
- Flutter
- data
- TEST
- textview
- Button
- Dialog
- DART
- 앱바
- activity
- textfield
- 계측
- intent
- appbar
- viewmodel
- LifeCycle
- CustomScrollView
- Coroutines
- scroll
- Compose
- 테스트
- binding
- ScrollView
- drift
- Navigation
Archives
- Today
- Total
Study Record
[C++] 자주 사용되는 라이브러리 본문
728x90
1. vector 라이브러리
#include <iostream>
#include <vector>
#pragma warning (disable:4996)
int main() {
// 형식 : vector<자료형> 변수이름;
vector<int> a;
// 마지막 원소 뒤에 원소를 삽입한다.
a.push_back(3);
// 원소의 개수를 리턴한다.
a.size();
// 원소를 얻는 방법
std::cout << a[0];
// 첫번째 원소를 얻는다.
a.front();
// 마지막 원소를 얻는다.
a.back();
// 마지막 원소를 제거한다.
a.pop_back();
// 모든 원소를 제거하지만 메모리는 남아있다.
a.clear();
// size가 0이면 true, 아니면 false
a.empty();
return 0;
}
2. stack 라이브러리
#include <iostream>
#include <stack>
#pragma warning (disable:4996)
using namespace std;
int main() {
// 형식: stack<자료형> 변수이름;
stack<int> s;
// push
s.push(3);
// pop : top에 있는 원소를 삭제한다.
s.pop();
// top에 있는 원소를 리턴한다.
s.top();
// 사이즈 반환
s.size();
// 스택이 비어있으면 true, 아니면 false
s.empty();
// pair 를 이용한 스택
stack<pair<int, int>> pair_s;
// 스택에 (1,3) 원소를 push 한다.
pair_s.push(make_pair(1, 3));
// top 원소 가져와서 사용하기 ex) (1,3)
pair_s.top().first; // 1
pair_s.top().second; // 3
return 0;
}
3. queue 라이브러리
#include <iostream>
#include <queue>
#pragma warning (disable:4996)
using namespace std;
int main() {
// 형식: queue<자료형> 변수이름;
queue<int> q;
// 큐에 원소를 추가한다.
q.push(3);
q.push(5);
q.push(6);
// 큐의 제일 앞에 있는 원소 반환 -> 3
cout << q.front() << endl;
// 큐의 제일 뒤에 있는 원소 반환 -> 6
cout << q.back() << endl;
// 큐 특성에 따라 처음에 넣었던 순서대로 꺼낸다. -> 3 꺼낸다.
q.pop();
// 큐의 사이즈 반환
q.size();
// 큐가 비어있으면 true, 아니면 false
q.empty();
// pair를 이용한 큐
queue<pair<int, int>> pair_q;
// pair를 이용한 큐 push
pair_q.push(make_pair(1, 3));
// pair를 이용한 큐 front
pair_q.front().first; // 1
pair_q.front().second; // 3
return 0;
}
※ 우선순위 큐 - queue 라이브러리
#include <iostream>
#include <queue>
#pragma warning (disable:4996)
using namespace std;
int main() {
// 우선순위 큐 사용하기 - 기본 내림차순
priority_queue<int> priority_q_des;
// push - 원소 넣기
priority_q_des.push(3);
priority_q_des.push(1);
priority_q_des.push(5);
priority_q_des.push(4);
// 비어있으면 true, 아니면 false
priority_q_des.empty();
// 사이즈 반환
priority_q_des.size();
// 맨 앞(제일 처음)에 있는 원소 출력
priority_q_des.top();
// 맨 앞에 있는 원소 꺼내기 - 현재 맨 위에 있는 원소는 5
priority_q_des.pop();
// 원소 출력해보기 - 4 3 1
while (!priority_q_des.empty()) {
cout << priority_q_des.top() << " ";
priority_q_des.pop();
}
cout << endl;
// 오름차순으로 사용하기 - 음수로 활용
priority_queue<int> priority_q_asc;
priority_q_des.push(-3);
priority_q_des.push(-1);
priority_q_des.push(-5);
priority_q_des.push(-4);
// 원소 출력해보기 - 1 3 4 5
while (!priority_q_des.empty()) {
cout << -priority_q_des.top() << " ";
priority_q_des.pop();
}
cout << endl;
// 2개 이상일 경우 첫번째가 동일할 경우, 두번째를 기준으로 내림차순으로 저장된다.
priority_queue<pair<int, int>> priority_pair_q;
priority_pair_q.push(make_pair(2, 1));
priority_pair_q.push(make_pair(5, 1));
priority_pair_q.push(make_pair(1, 1));
priority_pair_q.push(make_pair(5, 5));
priority_pair_q.push(make_pair(5, 2));
// 원소 출력해보기 - (5 , 5) (5 , 2) (5 , 1) (2 , 1) (1 , 1)
while (!priority_pair_q.empty()) {
int first = priority_pair_q.top().first;
int second = priority_pair_q.top().second;
cout << "(" << first << " , " << second << ") ";
priority_pair_q.pop();
}
return 0;
}
4. algorithm 라이브러리
#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime> // 난수 생성
#pragma warning (disable:4996)
using namespace std;
class Student{
public:
string name;
int age;
Student(string n, int a) {
this->name = n;
this->age = a;
}
};
bool compare(Student a, Student b) {
if (a.name == b.name) {
return a.age < b.age; // 나이는 적은 순
}
else {
return a.name < b.name; // 사전순
}
}
// sort() 함수는 기본 퀵정렬을 사용한다.
int main() {
int arr[9] = { 3, 7, 4, 1, 0, 9 ,2, 5, 8 };
// 오름차순 정렬
sort(arr, arr + 9);
// 확인 - 0 1 2 3 4 5 7 8 9
for(int i = 0; i < 9; i++) {
cout << arr[i] << " ";
}
cout << endl;
// 내림차순 정렬
sort(arr, arr + 9, greater<int>());
// 확인 - 9 8 7 5 4 3 2 1 0
for (int i = 0; i < 9; i++) {
cout << arr[i] << " ";
}
cout << endl;
// vector 를 활용한 sort
srand((int)time(NULL)); //난수생성을 위해
vector<int> v;
for (int i = 0; i < 7; i++) { //vector에 1의자리 숫자를 임의로 삽입
v.push_back(rand() % 50);
}
sort(v.begin(), v.end()); // 오름차순
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
cout << endl;
// compare 함수를 활용한 정렬
vector<Student> compare_v;
compare_v.push_back(Student("amy", 20));
compare_v.push_back(Student("boo", 10));
compare_v.push_back(Student("amy", 5));
compare_v.push_back(Student("hoo", 20));
compare_v.push_back(Student("amy", 30));
sort(compare_v.begin(), compare_v.end(), compare);
// (amy , 5) (amy, 20) (amy, 30) (boo, 10) (hoo, 20)
for (int i = 0; i < compare_v.size(); i++) {
cout << compare_v[i].name << " , " << compare_v[i].age << endl;
}
return 0;
}
5. map 라이브러리 - 파이썬의 딕셔너리
#include <map>
#include <iostream>
int main(){
// map<키형식, 값형식> 변수이름;
map<string, string> map1;
// map 에 요소 추가하기
map1.insert({"map", "od2"}); // 키 - map , 값 = od2
map1.insert(pair<string, string>("maa2", "odd")); // 키 - maa2 , 값 = odd
// map에 키를 이용하여 삭제하기 ex) key = Alice
map1.erase("Alice");
// map 모든 요소 삭제
map1.clear();
// map 에 키를 사용하여 값 얻기
cout << map1["map"] << endl;
// map 에 키가 존재하는지 찾기
if (map1.find("add") != map1.end()) {
// 키가 존재한다.
}
else {
// 키가 존재하지 않는다.
}
// 반복문으로 접근
for (auto iter = map1.begin(); iter != map1.end(); iter++) {
cout << iter->first << " " << iter->second << endl;
}
return 0;
}
728x90