Exercise 00: Easy find
easyfind ๋ผ๋ ํ ํ๋ฆฟํจ์๋ฅผ ๊ตฌํํด์ผํ๋ค. ํด๋นํจ์๋ container์ value๋ฅผ ๋ฐ๊ณ container์์ ํด๋น value๊ฐ ์กด์ฌํ๋ค๋ฉด ํด๋นํ๋ value์์น์ iterator๋ฅผ ๋ฐํํ๋ค.
๋ง์ฝ ์กด์ฌํ์ง์๋๋ค๋ฉด error ์ฒ๋ฆฌ ํ์.
iterator()
typename T::iterator iter;
iter = std::find(container.begin(), container.end(), value);
std::cout << "iter :" << *iter << std::endl; // OK!
**typename T::iterator**๋ ๋ฐ๋ณต์ ํ์ ์ด๋ฏ๋ก, ์ด๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ ํด๋น ๋ฐ๋ณต์์ ๊ฐ์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ถ๋ ฅํด์ผ ํ๋ค.
std::runtime_error
throw std::runtime_error("char");
C++ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ์์ธ ํด๋์ค๋ก ์ด 3๊ฐ์ง์ ์ํฉ์ผ๋ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
- ์๋ชป๋ ๋งค๊ฐ๋ณ์๋ ์ธ์
- ํ์ผ์ ์ด๊ฑฐ๋ ์ฝ์ ๋์ ์ค๋ฅ
- ๋ฆฌ์์ค ํ ๋น ์คํจ
์์ ๊ตฌํํด์ผ ํ๋ ํจ์์ ๊ฒฝ์ฐ throw๋ฅผ ๋์ ธ์ผํ๋ ์ํฉ์ด “1. ์๋ชป๋ ๋งค๊ฐ๋ณ์๋ ์ธ์” ์ ํด๋น๋๋ฏ๋ก runtime_error ์ฌ์ฉ.
Exercise 01: Span
class Span
{}
spanํด๋์ค๋ฅผ ๊ตฌํํด์ผํ๋ค.
std::distance()
distance(_InputIter __first, _InputIter __last)
๋ ๋ฐ๋ณต์(iterator)๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ๋ ์ฌ์ฉ๋๋ค.
void vectorSize(std::vector<int>::iterator const &begin, std::vector<int>::iterator const &end)
{
unsigned int size = std::distance(begin, end);
std::cout << "size :" << size << std::endl;
}
์์ ๊ฐ์ ํ์์ฒ๋ผ ์ฌ์ฉํ์ฌ iterator ์ฌ์ด์ ์ฌ์ด์ฆ๋ฅผ ๊ตฌํ ์ ์๋ค.
Exercise 02: Mutated abomination
Container
**Container**๋ ํฌ๊ฒ 4๊ฐ์ง๋ก ๊ตฌ๋ถํ์ฌ ๋๋ ์ ์๋ค๊ณ ํ๋ค.
- Sequence Containers
- Associative Containers
- Unordered Containers
- Adaptor Container
Sequence Containers
- ์์๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ปจํ ์ด๋
- ์์์ ์์๊ฐ ์ค์ํ๋ฉฐ, ๊ฐ ์์๋ ์์น(์ธ๋ฑ์ค)๋ฅผ ๊ฐ์ง๊ณ ์์
→ std::vector , std::list, std::deque, std::array
Associative Containers
- key-value๋ฅผ ์์ผ๋ก ์ ์ฅํ๋ ์ปจํ ์ด๋
- ์์๋ ์ ๋ ฌ๋ ์์๋ฅผ ๊ฐ์ง๊ณ ์์.
→ std::set, std::map, std::multiset, std::multimap
Unordered Containers
- ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ์ปจํ ์ด๋.
- ํด์ ํจ์๋ฅผ ํตํด ์ ํด์ง ์์น์ ์์๋ฅผ ์ ์ฅํ๋ฏ๋ก ์ ๋ ฌ์์๊ฐ ์์
→ std::unordered_set, std::unordered_map, std::unordered_multiset, std::unordered_multimap
Adaptor Container
- ๊ธฐ์กด ์ปจํ ์ด๋๋ฅผ ๋ํํ์ฌ ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์ด๋ํฐ.
- std::stack๊ณผ std::queue๋ ์ฃผ๋ก std::deque๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ๋์ง๋ง, ๋ณ๊ฒฝ ๊ฐ๋ฅ.
→ std::stack, std::queue, std::priority_queue
์์ ์ปจํ ์ด๋๋ค์ ๊ฐ๊ฐ์ ํน์ง์ ๋ฐ๋ผ ๋ค์ํ ์ฉ๋์ ๋ง๊ฒ ์ฌ์ฉ๋๋ค.
Sequence Containers : ์์๊ฐ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ ์ฉ.
Associative Containers : key-value ์์ ๋ค๋ฃฐ ๋ ์ฌ์ฉ.
Unordered Containers : ๋น ๋ฅธ ๊ฒ์ ๋ฐ ์ฝ์ ์ด ํ์ํ ๊ฒฝ์ฐ ํ์ฉ.
Adaptor Container : stack, queue, priority_queue ๋ฑ ํน๋ณํ ๋์์ ์ ๊ณตํ๋๋ฐ ํ์ฉ.
std::stack()
std::stack์ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก **iterator**๋ฅผ ์ฃผ์ง์์ง๋ง std::stack์ ๊ธฐ๋ฐ์ด ๋๋ std::deque์๋ iterator๊ฐ ์กด์ฌํด์
std::stack์ ๊ฒฝ์ฐ์๋ deque๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ปจํ ์ด๋๋ผ deque์ ์๋ iterator๋ฅผ ๋์ด์์ std::stack์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
'42seoul > projects' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CPP Module] 07 (0) | 2024.03.13 |
---|---|
[C++] templates (0) | 2024.03.13 |
[CPP Module] 06 (0) | 2024.03.13 |
[C++] casts (0) | 2024.03.13 |
[CPP Module] 05 (0) | 2024.03.13 |