๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

STD7

[C++] std::optional์˜ ๋ชจ๋“  ๊ฒƒ std::optional์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ์‹ค๋ฌด ์˜ˆ์ œstd::optional์€ C++17์—์„œ ๋„์ž…๋œ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ๊ฐ’์ด "์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ๋Š”" ์ƒํ™ฉ์„ ์•ˆ์ „ํ•˜๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— nullptr, NULL, ํ˜น์€ ํŠน๋ณ„ํ•œ ๊ฐ’(์˜ˆ: -1)์„ ์‚ฌ์šฉํ•˜์—ฌ "๊ฐ’ ์—†์Œ"์„ ํ‘œํ˜„ํ•˜๋˜ ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•˜๊ณ  ๋ช…ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.1. std::optional์˜ ๊ธฐ๋ณธ ๊ฐœ๋…std::optional์€ ํ…œํ”Œ๋ฆฟ ํด๋ž˜์Šค์ด๋ฉฐ, ์–ด๋–ค ํƒ€์ž… T์— ๋Œ€ํ•ด std::optional๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํƒ€์ž…์€ T ํƒ€์ž…์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜๋„ ์žˆ๊ณ , ๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” std::nullopt ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”:std::optional maybeInt;std::o.. 2024. 8. 22.
[STL] std::tuple, std::make_tuple, std::tie, std::ignore std::tuple ์šฐ๋ฆฌ๊ฐ€ STL ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋ณดํ†ต์€ ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. std::array์™€ std::vector, std::set์€ ํ•˜๋‚˜์˜ ํ…œํ”Œ๋ฆฟ ์ธ์ž๋ฅผ ๋ฐ›๊ณ , std::map, std::pair๋Š” key์™€ value, first์™€ second๋กœ ๋‘ ๊ฐœ์˜ ํƒ€์ž…์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐœ ์ด์ƒ์˜ ํƒ€์ž…์„ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? ๋‹ต์€ std::tuple์— ์žˆ์Šต๋‹ˆ๋‹ค. std::tuple์€ C++11 ์ดํ›„์— ๋„์ž…๋œ ํด๋ž˜์Šค ํ…œํ”Œ๋ฆฟ์œผ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์›์†Œ๋“ค์„ ๋‹จ์ผ ๊ฐ์ฒด๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์›์†Œ์—๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ธ๋ฑ์Šค(0๋ถ€ํ„ฐ ์‹œ์ž‘)๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #include // ์˜ˆ์‹œ: int์™€ double ํƒ€์ž…์„ ๊ฐ€์ง€๋Š” ํŠœํ”Œ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. std::tuple myTuple(42, 3.. 2023. 8. 4.
[C++] 17. ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception), std::exception ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception) C++์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ฐ์ง€ํ•˜๊ณ  ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ์— ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์— ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ๋˜๋Š” ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ์ ์ธ C++ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ ๋˜์ง€๊ธฐ (Throwing Exceptions) ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๋•Œ๋Š” throw ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. throw ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ์˜ˆ์™ธ ๊ฐ์ฒด๊ฐ€ ์˜ต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์™ธ ๊ฐ์ฒด๋Š” ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ์‚ฌ์šฉ์ž ์ •์˜ ํด๋ž˜์Šค ๊ฐ์ฒด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. void doSomething(int value) { if (value.. 2023. 7. 23.
[STL][functional] std::bind, std::function # std::bind, std::function std::bind ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์€ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๋” ์ž‘์€ ์ธ์ž ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋Š” ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ์ธ์ž ๊ฐ’์ด๋‚˜ ์ธ์ž ์œ„์น˜์— ๊ฐ’์„ ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. std::bind๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ž๋ฅผ ์ผ๋ถ€ ๊ณ ์ •ํ•˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. std::function์€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด(wrapper)์ด๋‹ค. ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. std::bind์™€ std::function์€ ์„œ๋กœ ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š”๋‹ค. ํŠนํžˆ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ•์ ์„ ๋ณด.. 2023. 6. 8.
[C/C++] 9. ๋ฐฐ์—ด(feat. vector & array) ๊ณ ์ „์ ์ธ c๊ฐ•์˜์—์„œ๋Š” ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ™์ด ์„ค๋ช…ํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ์ด๋ฆ„์ด ๊ณง ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋Š” ํฌ์ธํ„ฐ๋กœ๋„ ์“ฐ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ฐฐ์—ด ์ฑ•ํ„ฐ์—์„œ๋Š” ์–ธ์–ด์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋ฐฐ์—ด์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•๊ณผ Standard library๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ํฌ์ธํ„ฐ๋Š” ๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ ์†Œ๊ฐœํ•˜๊ฒ ๋‹ค. โœ… ๋ฐฐ์—ด C/C++์—์„œ ๋ฐฐ์—ด ์„ ์–ธ๊ณผ ์“ฐ์ž„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. #include void changeVal(double* d) { d[4] = 6.0; } void changeColor(Car* cars) { cars[1].color = "blue"; } int main() { double d[5] = {1.0, 2.0, 3.0, 4.0, 5.0}; Car cars[3]; int arr[] = {7,8,9}; chang.. 2023. 4. 25.
[C/C++] 8. ๋ฐ˜๋ณต๋ฌธ(์‹ฌํ™”)(feat. iterator, predicate, lambda) ์—ฌ๊ธฐ์„œ๋Š” C++์˜ Standard library ์ปจํ…Œ์ด๋„ˆ์˜ ์กฐ๊ฑด ์ˆœํšŒ์— ๋Œ€ํ•œ ๊ฐœ๋…๋“ค์„ ์ด์•ผ๊ธฐํ•œ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ์ฐธ๊ณ ํ•ด๋ณด๋„๋ก ํ•˜์ž. bool NewsScheduler::checkSchedule(Schedule& schedule) { const auto &curMilli = chrono::duration_cast(chrono::system_clock::now().time_since_epoch()).count(); const auto itr = find_if(scheduleMap.rbegin(), scheduleMap.rend(), [&curMilli](const pair &p) { return p.second.start c.. 2023. 4. 22.