1. ์ฌ์ฉ ์ธ์ด
C : ๊ฐ์ฅ ์ต์ํ์ง๋ง ์ง์ ๊ธฐ๋ฅ์ด ์ ์
C++ : STL์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ์ฉ
Java : java.util์ ์ ์ฉํ ๊ธฐ๋ฅ์ด ๋ง๋ค. ์คํ์๊ฐ์ด ๋๋ ค์ ์๋์์ ์ ํ์ ๋ฐ์
Python : ํ๋ก๊ทธ๋๋ฐ์ด ์ฝ์ง๋ง, ์คํ์๊ฐ์ด ๊ฐ์ฅ ๋๋ฆฌ๋ค.
2. ๋ฌธ์ ํด๊ฒฐ
-> ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฃ๊ตฌ์กฐ, ์๊ณ ๋ฆฌ์ฆ, ํ๋ก๊ทธ๋๋ฐ ๋ฅ๋ ฅ์ ๋ฌป๋ ๋ฌธ์
3. auto
for(auto a : A){ ~ }
4. for : ๋ฐ๋ณต๋ฌธ
5. pair<int,int>
6. STL : standard template library
made by HP in 1994
์ฝ๋๋ฅผ ์งง๊ณ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋๋ก ๋์์ค.
7. template
template <typename T> const T& my_max(const T&x, const T&y){
return (y<x)? x : y;
}
8. ๋ฐ๋ณต์ Iterator
๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ํด์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ๊ธฐ ์ํ ๋ฐฉ๋ฒ (ํฌ์ธํฐ์ ์ผ๋ฐํ)
9. begin() : ์ฒซ ๊ฐ์ ๊ฐ๋ฆฌํด , end() : ๋ง์ง๋ง ๊ฐ์ ๋ค์์ ๊ฐ๋ฆฌํด
list<int>::iterator it;
for(it = A.begin(); it!=A.end(); it++){ // A์ ์ฒ์๋ถํฐ ๋๊น์ง ์ถ๋ ฅ
cout << *it << "\n"; // iterator๋ ํฌ์ธํฐ์ด๋ฏ๋ก ๊ฐ์ ์ถ๋ ฅํ๋ ค๋ฉด *์ ์ฌ์ฉ
}
ํน์ auto a : A ์ฌ์ฉ
ํน์ int i=0; i<A.size(); ++i ์ฌ์ฉ
10. Containers against ADT
ADT | STL |
List | list |
Stack | vector |
Queue | deque |
Dictionary | map |
Mathematical Set | set |
11. sequence containers : vector, deque, list
associateive containers : set, multiset, map, multimap
12. Vector
array์ ์ ์ฌํ์ง๋ง ํฌ๊ธฐ๊ฐ ๋ฐ๋ ์ ์๋ค (๊ธธ์ด ์ง์ ์ด ์์ ๋กญ๋ค)
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ๋ค์ํ ๋ฉ์๋ ๋ฑ์ ์ฅ์
Random access
๋ฒกํฐ์ ๋๋ถ๋ถ์์ ์ฝ์ /์ญ์ : ์์ ์๊ฐ O(1)
๊ทธ ์ธ ์์น์์ ์ฝ์ /์ญ์ : ์ ํ ์๊ฐ O(n)
์ด๊ธฐํ
vector<int> ve(5) : ํฌ๊ธฐ๊ฐ 5์ธ ๋น ๋ฒกํฐ ์ ์ธ {0,0,0,0,0}
vector<int> v(5,-1) : ํฌ๊ธฐ๊ฐ 5์ธ ๋ฒกํฐ๋ฅผ -1๋ก ์ฑ์ {-1,-1,-1,-1,-1}
13. Deque(๋ฑ) : double ended queue
์ฝ์ ๋ฐ ์ญ์ ์์ ์ด ์์ชฝ ๋์์ ์ํ๋๋ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ
deque์ ์ฝ์ ๋ฐ ์ญ์ ๋ ์์ชฝ์์ ๋ชจ๋ ์ํํ ์ ์์ง๋ง FIFO ๊ท์น์ ๋ฐ๋ฅด์ง ์์
Circular Queue
Random access
push_front(), pop_front()
#include <deque>
์ ์ธ : deque<int> dq;
dq.push_front(1); dq.push_front(2); dq.push_front(3); // -> 3,2,1
dq.pop_front(); // -> 2,1
14. List
Doubly linked list
์์์ ์์น๋ฅผ ์ง์ ํ ์ ์๊ณ , ์/๋ค๋ง ์๋ฏธ (bidirectional iterator)
#include <list>
์ ์ธ : list<int> lst;
lst.push_back(1);
15. Set : ์งํฉ
๋น๊ต์ฐ์ฐ์ ๋๋ ๋น๊ต ํจ์๊ฐ ๊ตฌํ๋์ด์ผ ํจ (์ ๋ ฌํ๊ธฐ ์ํด์ )
#include <set>
set<int> S;
S.insert(1); S.insert(2); S.insert(3); // -> { 1, 2, 3 }
set<int>::iterator it;
it = S.find(2);
S.erase(it); // -> { 1, 3 }
#include <iostream>
#include <set>
using namespace std;
class Student{
public :
double height, weight;
bool operator<(const Student &s) const{
if(height != weight) return height < s.height;
return weight < s.weight;
}
};
int main(){
set<Student> Sett;
set<Student>::iterator it;
Student e;
e.height = 150; e.weight = 50;
Sett.insert(e);
e.height = 180; e.weight = 80;
Sett.insert(e);
for(it = Sett.begin(); it!=Sett.end(); ++it){
cout << it->height << " "<< it->weight << "\n";
}
}
16. Map : (key, value) ์์ ์ ์ฅํจ
like dictionary, associative array, hash
๋น๊ต์ฐ์ฐ์ ๋๋ ๋น๊ต ํจ์๊ฐ ๊ตฌํ๋์ด์ผ ํจ
#include <map>
map<Student, string> mp;
๋ฐ๋ณต๋ฌธ ์ถ๋ ฅ : cout << it->first.height << it->first.weight << it->second;
17. ์ฐ์ ์์ ํ Priority_queue
#include <queue>
priority_queue<Point> pq;
Point p;
p.x = 0; p.y = 1; pq.push(p);
p.x = 2; p.y = 3; pq.push(p);
while(!pq.empty()){
p = pq.top();
cout << p.x. << p.y;
pq.pop();
}
18. sort
#include <algorithm>
๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์, ๋น๊ตํจ์๋ ๋น๊ต ํด๋์ค ์ ์ธ ํ ์ฌ์ฉ ๊ฐ๋ฅ
typedef struct {
int x;
int y;
} point;
class less_point{
public :
bool operator() (const point &p1, const point &p2){ // x ๊ธฐ์ค ์ค๋ฆ์ฐจ์, x๊ฐ ๊ฐ์ผ๋ฉด y๊ธฐ์ค ์ค๋ฆ์ฐจ์
if (p1.x != p2.x) return p1.x < p2.x;
return p1.y < p2.y;
}
};
int main(){
vector<point> v(5);
sort(v.begin(), v.end(), less_point());
}
19. lower_bound / upper_bound
#include <algorithm>
vector<int>::iterator low, hi;
sort(v.begin(), v.end()); // ์ ๋ ฌ
low = lower_bound(v.begin(), v.end(), 4);
hi = upper_bound(v.begin(), v.end(), 4);
cout << low - v.begin(); // ์ ์ด๋ฏธ์ง์์๋ 4. ํฌ์ธํฐ๋ผ์ begin()์ ๋นผ์ฃผ๋ฉด ์ธ๋ฑ์ค๊ฐ ๋์จ๋ค. 4๊ฐ ์ฒ์ ๋์จ ์ธ๋ฑ์ค
cout << hi - v.begin(); // 8. ๋ง์ง๋ง 4์ ๋ค์ ์ธ๋ฑ์ค.
20. next_permutation & prev_permutation : ์์ด ๊ตฌํ๊ธฐ
sort๋ก ์ ๋ ฌ์ ๋ฐ๋์ ํด์ค์ผ ์์ด์ ๋น ์ง์์ด ๊ตฌํ ์ ์๋ค.
// ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์๋ฃ ์
do{
for(int i=0; i<3; ++i) cout << A[i];
} while(next_permutation(A, A + A.length());
// ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ์๋ฃ ์
do{
for(int i=0; i<3; ++i) cout << A[i];
} while(prev_permutation(A, A + A.length());
'๐ ์ ๊ณต ๊ณต๋ถ > ๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 6. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (0) | 2023.04.18 |
---|---|
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 5. ์์ฌ์์ด ๊ธฐ๋ฒ (0) | 2023.04.17 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 4. ์๋ฃ๊ตฌ์กฐ2 (0) | 2023.04.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 3. ์๋ฃ๊ตฌ์กฐ1 (0) | 2023.04.16 |
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 2. ๊ธฐ์ด์ํ (0) | 2023.04.16 |