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

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด/C++ ์‘์šฉ18

[STL] ์Šค๋งˆํŠธํฌ์ธํ„ฐ(std::unique_ptr, std::shared_ptr, std::weak_ptr) ์Šค๋งˆํŠธํฌ์ธํ„ฐ ์Šค๋งˆํŠธํฌ์ธํ„ฐ๋Š” C++์— ์ถ”๊ฐ€๋œ ๊ธฐ๋Šฅ ์ค‘์— ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. C++์˜ ์น˜๋ช…์ ์ธ ๋‹จ์  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ง์ ‘ํ•˜๋Š” ๋ฐ์— ์žˆ์–ด์„œ ๋ฆฌ์Šคํฌ๋ฅผ ๋– ์•ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” ์Šค๋งˆํŠธํฌ์ธํ„ฐ๋กœ ์ธํ•ด์„œ ๋ชจ๋˜ C++์ด ํ•œ์ธต ํ’๋ถ€ํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์Šค๋งˆํŠธ ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ํฐ ๋„์›€์„ ์ฃผ๋ฉฐ, ์ž์› ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค ์•ˆ์ „ํ•˜๊ฒŒ ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. std::unique_ptr std::unique_ptr์€ ๋…์ ์ ์œผ๋กœ ์†Œ์œ ํ•˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋‹จ์ผ ์†Œ์œ ๊ถŒ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์˜ค์ง ํ•˜๋‚˜์˜ std::unique_ptr๋งŒ์ด ํŠน์ • ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๊ณ , ์ดํ›„์—๋Š” ํ•ด๋‹น ๊ฐ์ฒด์˜ ์†Œ์œ ๊ถŒ์„ ๋‹ค๋ฅธ std::unique_ptr๋กœ ์ด์ „ํ•˜๊ฑฐ๋‚˜, ์†Œ.. 2023. 8. 5.
[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.
[STL][functional] std::bind, std::function # std::bind, std::function std::bind ํ•จ์ˆ˜ ํ…œํ”Œ๋ฆฟ์€ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ๋” ์ž‘์€ ์ธ์ž ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”์ธ๋”ฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋Š” ๋ฏธ๋ฆฌ ์ง€์ •ํ•œ ์ธ์ž ๊ฐ’์ด๋‚˜ ์ธ์ž ์œ„์น˜์— ๊ฐ’์„ ๊ณ ์ •์‹œํ‚ค๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. std::bind๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ์ž๋ฅผ ์ผ๋ถ€ ๊ณ ์ •ํ•˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์œ ์—ฐ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. std::function์€ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•จ์ˆ˜ ๊ฐ์ฒด(wrapper)์ด๋‹ค. ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ๋Ÿฐํƒ€์ž„ ์‹œ์— ๋‹ค๋ฅธ ํ•จ์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. std::bind์™€ std::function์€ ์„œ๋กœ ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š”๋‹ค. ํŠนํžˆ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ•์ ์„ ๋ณด.. 2023. 6. 8.
[STL] utility : minmax, move, forward, swap # std::minmax std::min๊ณผ std::max๋Š” ๋งŽ์ด ์จ๋ดค์ง€๋งŒ std::minmax๋Š” ์จ๋ณด์ง€ ์•Š์•˜๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ์‹ฌํ”Œํ•˜๋‹ค. std::minmax๋Š” std::pair๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ๊ฐ€ ์ตœ์†Ÿ๊ฐ’, ๋‘ ๋ฒˆ์งธ๊ฐ€ ์ตœ๋Œ“๊ฐ’์ด๋‹ค. min, max, minmax ๋ชจ๋‘ ๋””ํดํŠธ ์—ฐ์‚ฐ์ž๋Š” ' 2023. 6. 4.
vcpkg๋ฅผ ์“ฐ์ž ํ•ญ์ƒ C/C++ ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•ด ๊ณ ํ†ต๋ฐ›์Šต๋‹ˆ๋‹ค. ํ”Œ๋žซํผ ์ข…์†์ ์ด๋ฉด์„œ ๋ฌด๊ตฌํ•œ ์—ญ์‚ฌ๋ฅผ ๊ฐ€์ง„ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ์ตœ๊ทผ์— ๋‚˜์˜จ ์–ธ์–ด์™€ ๋‹ฌ๋ฆฌ ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์šฉํ•˜๊ธฐ๊ฐ€ ๊นŒ๋‹ค๋กœ์› ์ฃ . node์ง„์˜์˜ npm๊นŒ์ง€๋Š” ์•„๋‹ˆ์ง€๋งŒ C/C++์ง„์˜์—์„œ๋„ MS๊ฐ€ ๋งŒ๋“  vcpkg๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ทธ๋‚˜๋งˆ ํƒˆ๋ชจ์˜ ์†๋„๋ฅผ ๋Šฆ์ถฐ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. vcpkg์˜ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. https://vcpkg.io/en/index.html vcpkg - Open source C/C++ dependency manager from Microsoft Easy To Use Download and build popular libraries in a single step. Never worry about upstream dependenc.. 2023. 3. 19.
std::thread์™€ std::async โœ… ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ vs ๊ณผ์ œ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ work๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” std::thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ทธ ๊ฐ์ฒด์—์„œ work๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ด๋Š” ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜(thread-based) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋˜ ํ•˜๋‚˜๋Š” work๋ฅผ std::async์— ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด๊ณ  ์ด๋Š” ๊ณผ์ œ ๊ธฐ๋ฐ˜(task-based) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. int work(); std::thread t(work); auto f = std::async(work); ์œ„ ์ฝ”๋“œ๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ, async๋ฅผ ์“ฐ๋ฉด work์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์ž…๋‹ˆ๋‹ค.(std::get์„ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)(thread๋Š” ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.) ์ด๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ .. 2023. 1. 14.