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

[C++] 2. ์ž๋ฃŒ ๊ตฌ์กฐ(+ STL)

by ๋Œ€๋ณต2 2023. 8. 29.

 

์„œ๋ก 

์ด๋ฒˆ ๊ธ€์€ ๋ช‡ ์ฃผ๊ฐ„ ๋ฐฑ์ค€์ด๋‚˜ ๊ตฌ๋ฆ„ํ†ค ๋“ฑ ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋“ค์„ ํ’€์–ด๋ณด๋ฉฐ ๊ฐœ์ธ์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋А๊ผˆ๋˜ ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์„ ๋ฉ”๋ชจํ•˜๊ธฐ ์œ„ํ•ด ์“ด ๊ฒƒ์ด๋‹ค. C++์— ์กด์žฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ๋“ค๊ณผ ์ด ์™ธ์˜ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐฉ๋ฒ•์„ ๊ธฐ์ˆ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ํ•ด๋‹น ๊ธ€์€ C++์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์œผ๋‚˜, ํ†ต์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋“ค(Java, Python ๋“ฑ) ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋„ ์•ฝ๊ฐ„์˜ ๋ณ€๊ฒฝ๋งŒ ํ•˜์—ฌ ์ ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

๋ณ€์ˆ˜(Variable)

  • ๊ฐ€์žฅ ๊ธฐ์ดˆ์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ณต๊ฐ„
  • ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ๋ด์™”๋“ฏ์ด int, char, string, bool, float, double ๋“ฑ ์ž๋ฃŒํ˜•๊ณผ ์ •์˜๋ฅผ ํ†ตํ•ด ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์„ ์–ธ์˜ ์œ„์น˜์— ๋”ฐ๋ž€ ์ „์—ญ ๋ณ€์ˆ˜(์–ด๋””์„œ๋“  ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ),์ง€์—ญ ๋ณ€์ˆ˜(ํ•ด๋‹น ์ง€์—ญ(Scope)์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

- ๋ณ€์ˆ˜์˜ ์ง€์ •์ž

const ๋ณ€์ˆ˜ ์„ ์–ธ ์ „ const๋ฅผ ๋ถ™์ด๊ฒŒ ๋˜๋ฉด ์ƒ์ˆ˜๋กœ ์ „ํ™˜๋˜์–ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
static ์ •์  ๋ณ€์ˆ˜๋ผ๊ณ  ํ•˜๋ฉฐ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด๋„ ์ „์—ญ ๋ณ€์ˆ˜ ์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ ๋  ๋•Œ ๊นŒ์ง€ ์กด์žฌํ•œ๋‹ค
extern ๋‹ค๋ฅธ ํŒŒ์ผ์— ์กด์žฌํ•˜๋Š” ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ์„ ์–ธํ•œ๋‹ค.

 

 

๋ฐฐ์—ด(Array)

  • ์„ ์–ธํ•ด์•ผ ํ•  ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ (๋ณ€์ˆ˜์™€ ๊ฐ™์ด ์ž๋ฃŒํ˜•์„ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.)
  • ๋ฐฐ์—ด์˜ ๊ตฌ์„ฑ ๊ฐ’์„ ์š”์†Œ(element)๋ผ ํ•˜๋ฉฐ, ๊ทธ ๊ฐ’๋“ค์˜ ์œ„์น˜๋ฅผ ์ธ๋ฑ์Šค(index)๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์˜ ์„ ์–ธ ๋ฐฉ์‹์— ๋”ฐ๋ผ 1์ฐจ์› ๋ฐฐ์—ด, 2์ฐจ์› ๋ฐฐ์—ด...์œผ๋กœ ์„ ์–ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ณ ์ • ๋ฐฐ์—ด๊ณผ ๋™์  ๋ฐฐ์—ด๋กœ ๋‚˜๋‰œ๋‹ค.
๊ณ ์ • ๋ฐฐ์—ด arr[n] ์ปดํŒŒ์ผ์—์„œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •
๋™์  ๋ฐฐ์—ด new arr[n] ๋Ÿฐํƒ€์ž„ ๋™์•ˆ์— ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๊ฒฐ์ •, C์˜ malloc๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.

 

 

 

Vector

  • ์ „์ฒด์ ์ธ ๊ตฌ์„ฑ์€ ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ์˜ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐฑํ„ฐ๋ฅผ ์„ ์–ธํ•œ ๋’ค, ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
#include <vector>   // vector๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

vector<int> v   // intํ˜•์˜ ๋นˆ vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
vector<int> v(n)   // 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ณด์œ ํ•œ intํ˜•์˜ ๋นˆ vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
vector<int> v(n, 5)   // 5์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๋ณด์œ ํ•œ intํ˜•์˜ ๋นˆ vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
vector<int> v1(v2)   // v2๋ฅผ ๋ณต์‚ฌํ•œ v1 vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค
vector<vector<int>> v   // 2์ฐจ์› intํ˜•์˜ vector๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

- ์ฃผ์š” ํ•จ์ˆ˜

v.at(n) ์ธ๋ฑ์Šค๊ฐ€ n์ธ ์›์†Œ๊ฐ€ ์กด์žฌ ํ•  ๊ฒฝ์šฐ ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜
v.front() ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
v.back() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
v.clear() ๋ฐฑํ„ฐ์˜ ์ดˆ๊ธฐํ™” (๋ฉ”๋ชจ๋ฆฌ(๋ฐฑํ„ฐ์˜ size)๋Š” ์œ ์ง€)
v.begin() ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜
v.end() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜
v.push_back(n) n์„ ๋ฐฑํ„ฐ์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ ๋’ค์— ์ถ”๊ฐ€
v.pop_back() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐ
v.size() ๋ฐฑํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ถœ๋ ฅ
v.insert(iter, n) iter๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์œ„์น˜์— n์„ ์‚ฝ์ž…, ํ•ด๋‹น ์œ„์น˜์˜ iterator๋ฅผ ๋ฐ˜ํ™˜
v.erase(iter) iter๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œ

 

 

 

Pair

  • ์•ž์œผ๋กœ ๋‚˜์˜ฌ STL๋“ค๊ณผ ํ•จ๊ป˜ ์‘์šฉํ•˜๊ธฐ ์ข‹์€ ํด๋ž˜์Šค
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ 2๊ฐœ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • utility  ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‚˜, vector, algorithm ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— utility๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ
#include <utility>
#include <vector>
#include <algorithm> 

vector<pair<int,int>> v;

v.push_back(make_pair(5, 6));
v.push_back(make_pair(-2, 3));

 

 

 

Stack

  • ํ†ต์ƒ์ ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” LIFO(Last In First Out) ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด์ด๋‹ค.
  • Vector๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฐ€๋ณ€์ด๋ฉฐ, ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. 
#include <stack>   // stack์„ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

stack<int> s;    // int ์ž๋ฃŒํ˜•์˜ stack ์„ ์–ธ

- ์ฃผ์š” ํ•จ์ˆ˜

s.push(n) n์„ ์ถ”๊ฐ€
s.pop() top์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ 
s.top() s ์Šคํƒ์˜ top์„ ๋ฐ˜ํ™˜
s.empty() ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ (๋น„์–ด ์žˆ๋‹ค๋ฉด true ์ถœ๋ ฅ)

 

 

 

Queue

  • ์œ„์˜ Stack๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ FIFO(First In First Out) ๊ตฌ์กฐ์˜ ๋ฐฐ์—ด์ด๋‹ค.
#include <queue>   // queue๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

queue<int> q;   // int ์ž๋ฃŒํ˜•์˜ queue q ์„ ์–ธ

- ์ฃผ์š” ํ•จ์ˆ˜

s.push(n) ๋งˆ์ง€๋ง‰ ์›์†Œ ๋’ค์— n์„ ์ถ”๊ฐ€
s.pop() ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ 
s.front() ๋งจ ์•ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜
s.back() ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜
s.empty() ํ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ (๋น„์–ด ์žˆ๋‹ค๋ฉด true ์ถœ๋ ฅ)

 

- ์šฐ์„ ์ˆœ์œ„ ํ

  • ์ตœ๋Œ€ ๋˜๋Š” ์ตœ์†Œ ์›์†Œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๊ณ , ์ž„์˜์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
  • ํž™(heap)์ด๋ผ๊ณ  ํ•˜๋Š” ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„๋œ๋‹ค.
priority_queue<int> q;   // ์ตœ๋Œ€ ํž™ ๊ธฐ๋ฐ˜
priority_queue<int, vector<int>, greater<int>> q; /// ์ตœ์†Œ ํž™ ๊ธฐ๋ฐ˜

 

 

 

List

  • LinkedList(์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๊ฐ ์š”์†Œ๊ฐ€ ๊ฐ’๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ™์ด ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ, ๋’ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ฐ€ ํ•„์š” ์—†์ด ํฌ์ธํ„ฐ๋กœ ์ง€์ •
#include <list> // list๋ฅผ ์“ฐ๊ธฐ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

list<int> l;  // int์ž๋ฃŒํ˜•์˜ ๋ฆฌ์ŠคํŠธ l ์„ ์–ธ

- ์ฃผ์š” ํ•จ์ˆ˜

list.front() ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
list.back() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜
list.begin() ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜
list.end() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜
list.push_front(n) ๋ฆฌ์ŠคํŠธ ๋งจ ์•ž์— n์„ ์ถ”๊ฐ€
list.push_back(n) ๋ฆฌ์ŠคํŠธ ๋งจ ๋’ค์— n์„ ์ถ”๊ฐ€
list.insert(iter, n) iter๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์œ„์น˜์— n์„ ์‚ฝ์ž…
list.pop_front() ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ œ๊ฑฐ
list.pop_back() ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐ
list.erase(iter) iter๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์›์†Œ๋ฅผ ์‚ญ์ œ

 

'C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[C++] 1. C++ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ  (0) 2023.08.15