๐STL(Standard Template Library)
ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ. ์๋ฃ๊ตฌ์กฐ(์ปจํ ์ด๋, ์ดํฐ๋ ์ดํฐ, ์๊ณ ๋ฆฌ์ฆ)๋ฅผ ๋ชจ์๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
์ปจํ ์ด๋(์๋ฃ๊ตฌ์กฐ), ๋ฐ๋ณต์(iterator), ์๊ณ ๋ฆฌ์ฆ, ์์น
๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ์ฌ์ฌ์ฉ์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ. C์ธ์ด๋ CRT(C Runtime Library)๋ผ๋ ์ด๋ฆ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ, C++์ C++ Standard Library๋ฅผ ๊ฐ์ง๊ณ ์๋ค. 1994๋ C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ STL์ด ์ถ๊ฐ๋์๋ค.
ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ ๋ป ๊ทธ๋๋ก ์ผ๋ฐํ ํ๋ก๊ทธ๋๋ฐ(Generic Programming)์ ๊ธฐ๋ฐ์ผ๋ก ๋ฌด๋ถ๋ณํ ์ฌ๋ฌ๊ฐ์ง ํํ์ ์ฝ๋๋ฅผ ์ง์ํ๊ณ ํ์คํ๋ ์ฝ๋๋ฅผ ์งํฅํ๋ค. ํ์ค์ด๋ฏ๋ก ์ด์์ฑ์ด ์ข๋ค.
๊ฐ ์๋ฃ๊ตฌ์กฐ๋ง๋ค ์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ์์ผ๋ฏ๋ก ๊ฒ์, ์ ๋ ฌ, ์ฝ์ , ์ญ์ ์ ์ต์ ํ๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ ํ ๊ณจ๋ผ ์ฌ์ฉํ๋ค.
์์ธ ์ฒ๋ฆฌ๊ฐ ์ฝ์ง ์๋ค๋ ๋จ์ ์ด ์๋ค.
๐์ปจํ ์ด๋(Container)
Java์ ์ปฌ๋ ์ ๊ณผ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ๋ฐ์ดํฐ์ ์งํฉ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ค.
- ์ํ์ค ์ปจํ
์ด๋(์์ฐจ ์ปจํ
์ด๋) (Sequence Containers)
- vector ๋์ ๋ฐฐ์ด๋ก, ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์กฐ์ ๋๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ํจ์จ์ ์ธ ๋์ ์์ ์ถ๊ฐ/์ ๊ฑฐ๋ฅผ ์ง์ํ๋ค. ์ค๊ฐ ์ฝ์ ์ญ์ ๋ ์์ ๊ฐ์์ ๋ฐ๋ผ ์ฒ๋ฆฌ ์๋๊ฐ ๋น๋กํ๋ค. ๋ชจ๋ ์์๋ฅผ ๋ค๋ก ๋ฐ๊ฑฐ๋ ์์ผ๋ก ๋น๊ธฐ๊ธฐ ๋๋ฌธ. ์ ์ฌ) ๋์ ๋ฐฐ์ด, arraylist
- deque ์์ชฝ ๋์์ ๋น ๋ฅด๊ฒ ์ฝ์ /์ญ์ ๊ฐ ๊ฐ๋ฅํ ๋ฐํ(๋๋ธ ์๋๋ ํ). ์ฑ๋ฅ ๋ํ ๋ฒกํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ๊ฐ์์ ๋ฐ๋ผ ์ฒ๋ฆฌ ์๋๊ฐ ๋น๋กํ๋ค.
- list ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก, ์์์ ์์น์์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ํจ์จ์ . ์์์ ์ฝ์ ๋ฐ ์ญ์ ๊ฐ ์์น์ ์๊ด์์ด ๊ฐ์ ์๋. ๊ฐ๊ฐ์ ๋ ธ๋๊ฐ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋์ด์๋ค.
- array ๊ณ ์ ํฌ๊ธฐ์ ๋ฐฐ์ด. std::array๋ ํฌ๊ธฐ๊ฐ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๋ค.
- ์ ๋ ฌ ์ฐ๊ด ์ปจํ
์ด๋ (Sort Associative Containers)
- ์ฐ๊ด๋ ๋ค๋ฅธ ํ์ ๋ค์ ๋ด์ ์ ์๋ ์ปจํ ์ด๋. ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ ์ฐพ์๋ผ ์ ์์. ์คํ ์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์.
- set ๊ณ ์ ํ ์์๋ค์ ์ ๋ ฌ๋ ์ํ๋ก ์ ์ฅํ. ํค์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. ์ํ๋ ํค๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ธ๋ค.
- map ํค-๊ฐ ์์ ์ ์ฅํ๋ฉฐ, ํค๋ฅผ ํตํด ๊ฐ์ ๋น ๋ฅด๊ฒ ์กฐํํ ์ ์๋ค. ํค์ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ ๊ฐ, ์ฆ ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์๋ธ๋ค. key:value
- multiset ์ค๋ณต์ ํ์ฉํ๋ ์ ๋ ฌ๋ ์งํฉ.
- multimap ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ๋ ํค-๊ฐ ์์ ์งํฉ.
- ๋น์์ฐจ ์ปจํ
์ด๋ (Unordered Containers)
- unordered_set ํด์ ๊ธฐ๋ฐ์ ์งํฉ์ผ๋ก, ์์๋ค์ ์ ๋ ฌ๋์ง ์์.
- unordered_map ํด์ ๊ธฐ๋ฐ์ ํค-๊ฐ ์์ ์งํฉ.
- unordered_multiset ํด์ ๊ธฐ๋ฐ์ ์ค๋ณต์ ํ์ฉํ๋ ์งํฉ.
- unordered_multimap ํด์ ๊ธฐ๋ฐ์ ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ๋ ํค-๊ฐ ์์ ์งํฉ.
- ๋ฐ๋ณต์(Iterator)
- ์ปจํ ์ด๋(๋๋ ๋ฐฐ์ด)์ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ๊ธฐ ์ํด์๋ ์์์ ํ์ ์ด ๋ฌด์์ธ์ง ์์์ผํ๋ค. ์์์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋งํผ์ ์ด๋ํ๋ฉฐ ์ฝ์ด์ผ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ฌ์ฉ์๊ฐ ํฌ๊ธฐ๋ ํ์ ์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ ๋ชจ๋ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฝ์ ์ ์๋๋ก ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก ๋ฐ๋ณต์๋ค. ์ปจํ ์ด๋์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๊ฐ์ฒด. ์ปจํ ์ด๋์ ์์๋ถํฐ ๋๊น์ง ์ด๋ํ๋ฉด์ ์์๋ฅผ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- ์๊ณ ๋ฆฌ์ฆ(algorithm)
- ์ ๋ ฌ ๋ฐ ๊ฒ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ํจ์.
- ๋ณ๊ฒฝ ๋ถ๊ฐ ์์ฐจ ์๊ณ ๋ฆฌ์ฆ
- ๋ณ๊ฒฝ ๊ฐ๋ฅ ์์ฐจ ์๊ณ ๋ฆฌ์ฆ
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฒ์ฉ ์์น ์๊ณ ๋ฆฌ์ฆ
- ๊ธฐํ
- stack: LIFO(Last In First Out) ๋ฐฉ์์ ์ปจํ ์ด๋.
- queue: FIFO(First In First Out) ๋ฐฉ์์ ์ปจํ ์ด๋.
- priority_queue: ์ฐ์ ์์๊ฐ ์๋ ํ๋ก, ๊ฐ์ฅ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์์๋ฅผ ์ฐ์ ์ ์ผ๋ก ๊บผ๋ธ๋ค.
๐๋ฒกํฐ(Vector)
์ผ๋ฐํ๋ ์ปจํ ์ด๋ ์ค ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ค. ํ์ํ ํฌ๊ธฐ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ์ฌํ ๋นํ์ฌ ๋๋ฆด ์ ์๋ค.(๋์ ๋ฐฐ์ด) ํ ํ๋ฆฟ ๊ธฐ๋ฐ์ผ๋ก ํ์ ์ ๋ฌด๊ดํจ.
์ด๊ธฐ ์์ฑ๋ ๊ธธ์ด๋งํผ ๋ฐ์ดํฐ๊ฐ ๊ฝ ์ฐจ์์ ๋ ๋ ๋ฃ์ผ๋ ค๊ณ ์๋ํ๋ฉด ๋ด๋ถ์์ ํฌ๊ธฐ๋ฅผ ๋๋ฆฐ๋ค.
`vector<T> vectorName;` `vector<int> intVector;` `vector<int> intVector(5);`
๋ฐฐ์ด์ฒ๋ผ ์ธ๋ฑ์ค๋ก ์์๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << endl;
}
๐๋ฐํฌ(Deque)
๋ฒกํฐ์ ์ ์ฌํ๋ ์์ชฝ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ญ์ ํ ์ ์๋ ์ปจํ ์ด๋. ์/์ค๊ฐ ์ธ๋ฑ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ ๊ฒฝ์ฐ ๋ชจ๋ ์์์ ์ธ๋ฑ์ค๊ฐ ๋ค๋ก ๋ฐ๋ฆฌ๋ฉด์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ ๋ฒกํฐ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ปจํ ์ด๋.
`deque<T> dqName; deque<int> dq;`
๐๋ฆฌ์คํธ(List)
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ์ปจํ ์ด๋. ๊ฐ๊ฐ์ ์์๊ฐ ํฌ์ธํฐ๋ก ์ฐ๊ฒฐ๋์ด์๋ค. ๋ฐ์ดํฐ๊ฐ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ธ์ ํด ์์ง ์๊ณ , ๋ ผ๋ฆฌ์ ์ธ ์์๋ฅผ ๊ธฐ์ตํ์ฌ ํฌ์ธํฐ๋ก ์ด์ ๋๋ ๋ค์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์ฝ์ ๋ฐ ์ญ์ ์๋๊ฐ ์ผ์ ํ๋ค.
list<T> li; list<int> li;
๐ ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked-List)
์์๋ค์ด ์ธ์ ํด์๋ ๊ฒ์ด ์๋๋ผ ๋ฉ๋ชจ๋ฆฌ ๋์ฒ์ ํฉ์ด์ ธ์ ์์ ์ ์ด์ ๋๋ ๋ค์ ์์์ ์์น๋ฅผ ํฌ์ธํฐ๋ก ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฆฌ์คํธ. ์ถ์์ ์์์ ๋ฌผ๋ฆฌ์ ์์๊ฐ ์ผ์นํ๋ ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๋ฌผ๋ฆฌ์ ์ธ ์์์ ์๊ด์ด ์๋ค. ์์์ ์์น์ ๋ํ ์์์ ์ฝ์ ๋ฐ ์ญ์ ์๋๊ฐ ๋์ผํ๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ์์ ์์๋ ๋ฐ์ดํฐ(๊ฐ)์ ๋งํฌ(๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ)๋ฅผ ๋์์ ๊ฐ์ง๋ฉฐ ๋งํฌ๋ ํํ ์์์ ์ฃผ์๊ฐ์ด๋ค. ์ด๋ฌํ ๋จ์ ๊ตฌ์กฐ๋ฅผ ๋ ธ๋(node)๋ผ๊ณ ํ๋ค. ๊ฐ ์์๋ ๋ฐ์ดํฐ ์ธ์ ์ด์ /๋ค์ ๋ ธ๋์ ๋งํฌ๋ฅผ ์ถ๊ฐ๋ก ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
๋ค์ ๋ ธ๋์ ์ ๋ณด๋ง์ ๊ฐ์ง ๋ฆฌ์คํธ๋ฅผ ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Single Linked List), ์ด์ ๊ณผ ๋ค์ ๋ ธ๋์ ์ ๋ณด๋ฅผ ๋ ๋ค ๊ฐ์ง๊ณ ์๋ ๋ฆฌ์คํธ๋ฅผ ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Double Linked Llist)๋ผ๊ณ ํ๋ค.
struct Node{
T value;
Node* next;
}
#include <iostream>
using namespace std;
struct Node {
int value;
Node* next;
};
Node* head;
Node* now;
void InitLinkedList() {
head = (Node*)malloc(sizeof(Node));
head->value = NULL;
head->next = NULL;
now = head;
}
Node* InsertNode(Node* now, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = value;
newNode->next = now->next;
now->next = newNode;
return newNode;
}
bool DeleteNode(int index) {
Node* prev = head;
Node* del;
for (int i = 0; i < index; i++) {
prev = prev->next;
if (prev == NULL) {
return false;
}
}
del = prev->next;
if (del == NULL) {
return false;
}
prev->next = del->next;
free(del);
return true;
}
bool DeleteNode(Node* targetPrev) {
Node* del;
del = targetPrev->next;
if (del->next == NULL) {
return false;
}
targetPrev->next = del->next;
free(del);
return true;
}
void DeleteList() {
free(head);
head = NULL;
}
int main() {
InitLinkedList();
for (int i = 0; i < 10; i++) {
InsertNode(now, i + 1);
now = now->next;
}
for (now = head->next; now; now = now->next) {
cout << now->value << endl;
}
cout << endl;
//bool result = DeleteNode(head);
bool result = DeleteNode(9);
cout << endl;
cout << "result : " << result << endl;
for (now = head->next; now; now = now->next) {
cout << now->value << endl;
}
DeleteList();
}
๐Set
์ ๋ ฌ ์ฐ๊ด ์ปจํ ์ด๋. ์์๊ฐ ์๊ณ ์ค๋ณต์ ํ์ฉํ์ง ์๋ ์๋ฃ๊ตฌ์กฐ. ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค.
#include <iostream>
#include <set>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 2, 5, 6, 3};
set<int> scon;
set<int>::iterator it;
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
scon.insert(arr[i]);
}
for (it = scon.begin(); it != scon.end(); it++) {
cout << *it << endl;
}
return 0;
}
๐Map
ํค:๊ฐ ํํ๋ก ํ๋์ ์์ ์ด๋ฃจ์ด ๊ด๋ฆฌ๋๋ค. ๊ฐ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค. ๊ฒ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ ์ ๋ฆฌํ๋ค.
์ฝ์ ๋ฐ ์ญ์ ์ ๋ฐ์ดํฐ์ ์ด๋์ด ๋ฐ์ํ๋ฏ๋ก ์๋์ ์ผ๋ก ๋๋ฆฌ๋ค.
`map<keyType, dataType> m; map<string, int> ageList;`
`first` ๋ ํค, `second` ๋ ๊ฐ.
map<string, int> phoneBook;
map<string, int>::iterator it;
string name;
for (int i = 0; i < sizeof(phoneList) / sizeof(phoneList[0]); i++) {
phoneBook[phoneList[i].name] = phoneList[i].phone;
}
while (true) {
cout << "์ข
๋ฃ: [q]";
cout << "์ด๋ฆ์ ์
๋ ฅํ์ธ์: ";
cin >> name;
if (name == "q") {
break;
}
// phoneBook[name]์ value๋ง์ ๋ถ๋ฌ์ค์ง๋ง,
// ๋ฐ๋ณต์๋ก it = phoneBook.find(name);๋ฅผ ์ฌ์ฉํ๋ฉด
// ์์์ ์ฃผ์๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ํค์ ๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค!
if (phoneBook[name]) {
cout << "๋ฒํธ๋ " << phoneBook[name] << "์
๋๋ค." << endl;
}
else {
cout << "์ฐพ์ ์ ์์ต๋๋ค. [" << name << "]" << endl;
}
}
๐ํด์๋งต(hashMap)
STL์์๋ ํด์๋งต์ ์ง์ํ๋ค. hash ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์๋๊ฐ ๋น ๋ฅด๋ค.
* `hash_map` ์ด deprecated ๋์์ต๋๋ค. `unordered_map` ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
unordered_map<string, int> coffee;
coffee["์๋ฉ๋ฆฌ์นด๋
ธ"] = 2000;
unordered_map<string, int>::iterator it;
for (it = coffee.begin(); it != coffee.end(); it++) {
cout << "[" << it->first << "] " << it->second << "์" << endl;
}
unordered_map<string, vector<string>> devLang;
vector<string> c;
c.push_back("C");
c.push_back("C++");
c.push_back("C#");
vector<string> script;
devLang["C ๊ณ์ด"] = c;
vector<string> scr;
scr.push_back("JavaScript");
scr.push_back("TypeScript");
devLang["Script ๊ณ์ด"] = scr;
unordered_map<string, vector<string>>::iterator mapIt;
vector<string>::iterator it;
for (mapIt = devLang.begin(); mapIt != devLang.end(); mapIt++) {
cout << "[" << mapIt->first << "]" << endl;
for (it = mapIt->second.begin(); it != mapIt->second.end(); it++) {
cout << *it << " " << endl;
}
cout << endl;
}
[Script ๊ณ์ด]
JavaScript
TypeScript
[C ๊ณ์ด]
C
C++
C#
๐๋ฐ๋ณต์(Iterator)
์ปจํ ์ด๋์ ๊ตฌ๊ฐ์ ๋ํด ๊ฐ์ ์ฝ์ด์ฌ ์ ์๋๋ก ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๋ชจ๋ ์ปจํ ์ด๋์ ๋์ผํ๊ฒ ๋์ํ๋ค.(๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ๊ฐ์ ํจ์๋ก ๊ฐ์ ์ฝ์ ์ ์๋ค.)
`list::iterator listIter; vector::iterator vectorIter;`
ํฌ์ธํฐ์ ์ ์ฌํจ. `listIter++` ์ฒ๋ผ ๋ฐ๋ณต์๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒ์ ๊ทธ ๋ค์ ์์๋ฅผ ์ฝ์ด์ค๋ ๊ฒ์ ๋ปํ๋ค.
์๋ฃ๊ตฌ์กฐ์ `begin()` ์ ์์ ์์๋ฅผ ์๋ฏธํ๋ค. `end()` ๋ ๋ง์ง๋ง๊ฐ์ด ์๋๋ผ ๋ง์ง๋ง๊ฐ์ ๋ค์์ ์๋ฏธํ๋ค.
๋ฌธ์์ด์ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์ ํฌ์ธํฐ๋ก ๊ฐ ๋ฌธ์๋ฅผ ์ฝ์ ์ ์๋ค.
char arr[] = "Hello!";
char* ptr = arr;
while (*ptr) // ptr != NULL
{
cout << *ptr;
ptr++;
}
์ปจํ ์ด๋๋ ์ด์ฒ๋ผ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋๋ผ๋ ๋์ผํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๋ด ํฌํจ๋ ์์๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ๋ฆฌํฌ ์ ์๋ค.
์ปจํ ์ด๋์ ํ์ ์ ๋ฐ๋ผ ๋ฐ๋ณต์๋ฅผ ์ ์ธํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
int intArr[] = { 1, 2, 3, 4, 5 };
vector<int> vec(&intArr[0], &intArr[sizeof(intArr) / sizeof(intArr[0])]);
vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); it++) {
cout << *it << " ";
}
list<int> li;
list<int>::iterator it;
for (int i = 0; i < 5; i++) {
li.push_back(i + 1);
}
for (it = li.begin(); it != li.end(); it++) {
cout << *it << " ";
}
๐์๊ณ ๋ฆฌ์ฆ(Algorithm)
์ปจํ ์ด๋์ ์ ์ฉํ ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํด๋ ํจ์. ์ ๋ ฌ, ๊ฒ์, ์กฐ์ ๋ฑ์ ์ฐ์ฐ์ ์ํํ๋ค. ํน์ ์ปจํ ์ด๋์ ์ข ์๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉํ ์ ์์.
ex) `find()` `first`์ `last` ์ฌ์ด์ `value`๊ฐ ์๋์ง ๊ฒ์ฌํ๊ณ ์ฐพ๋ ๊ฐ์ด ์๋ค๋ฉด ํด๋น ์์น์ ๋ฐ๋ณต์๋ฅผ ๋ฆฌํดํ๋ค.
ex) `for_each()` ์ ๊ตฌ๊ฐ์ ์ํํ๋ฉด์ ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ํธ์ถํ๋ค. `for_each`๋ ๋ฃจํ๋ฅผ ๋๋ฆฌ๋ ์ญํ ๋ง ํ๋ฏ๋ก ๊ตฌ์ฒด์ ์ธ ๋์์ ํ๋ ํจ์ ๊ฐ์ฒด๊ฐ ๋ฐ๋์ ํ์ํ๋ค. ๋ด๋ถ์์ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ค.
ex) `copy()` ์ปจํ ์ด๋์ ๋ฒ์๊ฐ์ ๋์์ด ๋๋ ์ปจํ ์ด๋์ ๋ณต์ฌํ๋ ํจ์.
ex) `sort()` ๊ธฐ๋ณธ์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ. ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ค๋ฉด `greator<int>()` ๋ฅผ ์ ๋ฌํด์ผํจ.
int intArr[] = { 1, 2, 3, 4, 5 };
vector<int> vec(&intArr[0], &intArr[sizeof(intArr) / sizeof(intArr[0])]);
vector<int>::iterator it;
if (find(vec.begin(), vec.end(), 5) != vec.end()) {
cout << "Found Five!";
}
else {
cout << "Not Found";
}
'C, C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์ค๋งํธ ํฌ์ธํฐ (0) | 2024.09.19 |
---|---|
[C++] ํ ํ๋ฆฟ(Template) (0) | 2024.08.29 |
[C++] ์์(Inheritance) (0) | 2024.08.29 |
[C++] ๊ฐ์ฒด ์งํฅ (6) | 2024.08.19 |
[C] ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น (0) | 2024.08.13 |