๐๐ปโ๏ธ What is STL ?
ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(Standard Template Library, STL)๋ C++์ ์ผ๋ถ๋ก, ์ฌ๋ฌ ๊ฐ์ง ๋ฒ์ฉ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
๐ฆ ์ปจํ ์ด๋
1. vector: ๊ฐ๋ณ ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์ ๊ณต. ๋น ๋ฅธ ๋ฌด์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ฉฐ, ๋ค์ชฝ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ์ฐ์ฐ์ ํจ์จ์ ์ด๋ค.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
vec.push_back(6); // ๋ฒกํฐ ๋์ 6 ์ถ๊ฐ
cout << "The vector contains: ";
for(int n : vec) {
cout << n << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: The vector contains: 1 2 3 4 5 6
}
2. deque: ์์ชฝ ๋์์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์๋ ๋๋ธ ์๋๋ ํ์ด๋ค.
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> d = {2, 3, 4};
d.push_front(1); // ๋งจ ์์ ์์ ์ถ๊ฐ
d.push_back(5); // ๋งจ ๋ค์ ์์ ์ถ๊ฐ
cout << "The deque is: ";
for(int n : d) {
cout << n << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: The deque is: 1 2 3 4 5
}
3. list: ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก, ๋ฆฌ์คํธ ์์ชฝ ๋ ๋ฟ๋ง ์๋๋ผ ์ค๊ฐ์ ์์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ์ฐ์ฐ์ ํจ์จ์ ์ด๋ค.
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> lst = {2, 4, 6, 8};
lst.push_front(1); // ๋งจ ์์ ์์ ์ถ๊ฐ
lst.push_back(9); // ๋งจ ๋ค์ ์์ ์ถ๊ฐ
cout << "The list is: ";
for(int n : lst) {
cout << n << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: The list is: 1 2 4 6 8 9
}
4. map: ํค-๊ฐ ์์ ์ ์ฅํ๋ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ฐ๊ด ์ปจํ ์ด๋์ด๋ค.
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> ageMap;
ageMap["Alice"] = 30;
ageMap["Bob"] = 25
;
cout << "Alice's age: " << ageMap["Alice"] << endl;
cout << "Bob's age: " << ageMap["Bob"] << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Alice's age: 30 // Bob's age: 25
}
5. set: ํค๋ง์ ์ ์ฅํ๋ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ปจํ ์ด๋๋ก, ๋ชจ๋ ํค๋ ์ ์ผํ๋ค.
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> myset;
myset.insert(3);
myset.insert(1);
myset.insert(7); // set์ ์๋์ผ๋ก ์ ๋ ฌ๋จ
cout << "Elements in set: ";
for(int element : myset) {
cout << element << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Elements in set: 1 3 7
}
6. unordered_map์ unordered_set: ํด์ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์ฐ๊ด ์ปจํ ์ด๋๋ก, ๋น ๋ฅธ ์ ๊ทผ ์๊ฐ์ ์ ๊ณตํ๋ค.
#include <iostream>
#include <unordered_map>
#include <unordered_set>
using namespace std;
int main() {
unordered_map<string, int> umap;
umap["one"] = 1;
umap["two"] = 2;
umap["three"] = 3;
cout << "unordered_map elements: ";
for(auto &pair : umap) {
cout << pair.first << "=>" << pair.second << ' ';
}
cout << endl;
unordered_set<int> uset = {4, 2, 1};
cout << "unordered_set elements: ";
for(int element : uset) {
cout << element << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: unordered_map elements: one=>1 two=>2 three=>3
// unordered_set elements: 1 2 4
}
7.stack๊ณผ queue: ๊ฐ๊ฐ ํ์ ์ ์ถ(LIFO) ๋ฐ ์ ์ ์ ์ถ(FIFO) ์ ์ฑ ์ ๊ตฌํํ๋ ์ปจํ ์ด๋ ์ด๋ํฐ์ด๋ค.
// stack
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> st;
st.push(1); // ์์ ์ถ๊ฐ
st.push(2);
st.push(3);
cout << "Stack elements: ";
while (!st.empty()) {
cout << st.top() << ' '; // ๋งจ ์์ ์์ ํ์ธ
st.pop(); // ๋งจ ์์ ์์ ์ ๊ฑฐ
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Stack elements: 3 2 1
}
// queue
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
q.push(1); // ์์ ์ถ๊ฐ
q.push(2);
q.push(3);
cout << "Queue elements: ";
while (!q.empty()) {
cout << q.front() << ' '; // ๋งจ ์์ ์์ ํ์ธ
q.pop(); // ๋งจ ์์ ์์ ์ ๊ฑฐ
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Queue elements: 1 2 3
}
๐ค ์๊ณ ๋ฆฌ์ฆ
- sort: ์ปจํ ์ด๋ ๋ด์ ์์๋ฅผ ์ ๋ ฌํ๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {4, 1, 3, 5, 2};
sort(vec.begin(), vec.end()); // ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
for(int v : vec) {
cout << v << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 2 3 4 5
}
2. find์ binary_search: ์์๋ฅผ ์ฐพ๋๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
auto it = find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
cout << "Element found: " << *it << endl;
} else {
cout << "Element not found." << endl;
}
kotlin
Copy code
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Element found: 3
}
3. accumulate: ์ปจํ ์ด๋ ๋ด์ ์์๋ค์ ํฉ์ ๊ณ์ฐํ๋ค.
#include <numeric>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
int sum = accumulate(vec.begin(), vec.end(), 0);
cout << "Sum of elements: " << sum << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Sum of elements: 15
}
4. replace์ replace_if: ํน์ ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๊ต์ฒดํ๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5, 3};
replace(vec.begin(), vec.end(), 3, 8); // ๋ชจ๋ 3์ 8๋ก ๊ต์ฒด
for(int v : vec) {
cout << v << ' ';
}
cout << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 2 8 4 5 8
}
5. count์ count_if: ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์์ ๊ฐ์๋ฅผ ๊ณ์ฐํ๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5, 3};
int cnt = count(vec.begin(), vec.end(), 3);
cout << "Number of occurrences of 3: " << cnt << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Number of occurrences of 3: 2
}
6. next_permutation: ์ฃผ์ด์ง ๋ฒ์์ ์์๋ค์ ๊ฐ๋ฅํ ์์ด์ ์์ฑํ๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3};
cout << "The 3! possible permutations with 3 elements:\n";
do {
for(int v : vec) {
cout << v << ' ';
}
cout << endl;
} while(next_permutation(vec.begin(), vec.end()));
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1
}
7. lower_bound์ upper_bound: ์ ๋ ฌ๋ ๋ฒ์์์ ํน์ ๊ฐ์ ํํ๊ณผ ์ํ์ ์ฐพ๋๋ค.
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> vec = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
auto lower = lower_bound(vec.begin(), vec.end(), 3);
auto upper = upper_bound(vec.begin(), vec.end(), 3);
cout << "Lower bound for 3: " << (lower - vec.begin()) << endl;
cout << "Upper bound for 3: " << (upper - vec.begin()) << endl;
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: Lower bound for 3: 3, Upper bound for 3: 6
}
๐ ๋ฐ๋ณต์
- STL์ ์ปจํ ์ด๋์ ์์๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฐ๋ณต์(iterator)๋ฅผ ์ ๊ณตํ๋ค. begin(), end(), rbegin(), rend() ๋ฑ์ ํจ์๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋๋ฅผ ์ํํ ์ ์๋ค.
1. begin(): ์ปจํ ์ด๋์ ์์ ์ง์ ์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// begin() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ ์์ ๋ฐ๋ณต์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
vector<int>::iterator it = vec.begin();
// ์์๋ถํฐ ๋๊น์ง ์ํํ๋ฉด์ ์์ ์ถ๋ ฅ
while (it != vec.end()) {
cout << *it << ' ';
++it;
}
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 2 3 4 5
}
2. end(): ์ปจํ ์ด๋์ ๋์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// end() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ
์ด๋์ ๋ ๋ฐ๋ณต์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
vector<int>::iterator it = vec.end();
// ์ญ์์ผ๋ก ๋๋ถํฐ ์์๊น์ง ์ํํ๋ฉด์ ์์ ์ถ๋ ฅ
while (it != vec.begin()) {
--it;
cout << *it << ' ';
}
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 5 4 3 2 1
}
3. rbegin(): ์ญ๋ฐฉํฅ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ปจํ ์ด๋์ ๋์ ๊ฐ๋ฆฌํค๋ ์ญ์ํ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// rbegin() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ํ ๋ฐ๋ณต์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
vector<int>::reverse_iterator it = vec.rbegin();
// ์ญ์์ผ๋ก ์์ ์ถ๋ ฅ
while (it != vec.rend()) {
cout << *it << ' ';
++it;
}
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 5 4 3 2 1
}
4. rend(): ์ญ์ํ ๋ฐ๋ณต์์ ๋์ ๋ํ๋ธ๋ค.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// rend() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ํ ๋ฐ๋ณต์์ ๋์ ๊ฐ์ ธ์ต๋๋ค.
vector<int>::reverse_iterator it = vec.rend();
// ์ญ์์ผ๋ก ์์ ์ถ๋ ฅ
while (it != vec.rbegin()) {
--it;
cout << *it << ' ';
}
return 0; // ์ถ๋ ฅ ๊ฒฐ๊ณผ: 1 2 3 4 5
}
โ๏ธ ๊ทธ๋์ ์ด๊ฒ๋ง ์์๋?
๋ค ์ค์ํ์ง๋ง ๊ทธ๋๋ ~~
Vector, deque, List
- ๋ฐฑ์ค ๋ค์ด์ 4 ํผ์ -
'๊ฐ๋ฐ > C, C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C] C์ธ์ด์์ ํ ๋ฉ๋ชจ๋ฆฌ์ ์คํ ๋ฉ๋ชจ๋ฆฌ (0) | 2024.11.25 |
---|---|
[C++] C++ ์ ์ถ๋ ฅ ์๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ (0) | 2023.07.08 |
[C์ธ์ด] ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ก /C์ธ์ด ๊ฐ๋ก (0) | 2023.06.23 |