STL Container - Sequence Container

STL Container๋Š” ๊ฐ™์€ ํƒ€์ž…์˜ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ์ผ์ข…์˜ ์ง‘ํ•ฉ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๋Š” class template์œผ๋กœ, ์ปจํ…Œ์ด๋„ˆ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ์— ํฌํ•จํ•  ์š”์†Œ์˜ ํƒ€์ž…์„ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ์—๋Š” ๋ณต์‚ฌ ์ƒ์„ฑ๊ณผ ๋Œ€์ž…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์˜ ๊ฐ์ฒด๋งŒ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์š”์†Œ์˜ ์ถ”๊ฐ€ ๋ฐ ์ œ๊ฑฐ๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ๋„์™€์ฃผ๋Š” ์—ฌ๋Ÿฌ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

STL Sequence Container

๋ฐ์ดํ„ฐ๋ฅผ ์„ ํ˜•์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ, ํŠน๋ณ„ํ•œ ์ œ์•ฝ์ด๋‚˜ ๊ทœ์น™์ด ์—†๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ์—์„œ๋Š” ์‚ฝ์ž…๋œ ์š”์†Œ์˜ ์ˆœ์„œ๊ฐ€ ๊ทธ๋Œ€๋กœ ์œ ์ง€๋œ๋‹ค.

  1. ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ง์„  ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์น˜๋˜์–ด ์žˆ์–ด์•ผํ•œ๋‹ค.

  2. ๋ฐ˜๋ณต์ž๊ฐ€ ์ตœ์†Œํ•œ ์ˆœ๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(forward iterator) ์ด์ƒ์ด์–ด์•ผํ•œ๋‹ค.

  3. ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ์˜ ์š”์†Œ๋“ค์€ ๋ช…ํ™•ํ•œ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ, ํŠน์ • ์œ„์น˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค.

vector

vector ์ปจํ…Œ์ด๋„ˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์‹œํ€€์Šค ์ปจํ…Œ์ด๋„ˆ๋กœ ๋ฐฐ์—ด๊ณผ ๋น„์Šทํ•˜์—ฌ ์‚ฌ์šฉ์ด ์‰ฌ์šฐ๋ฉฐ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. vector๋Š” ์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž(Random Access Iterator)๋ฅผ ์ง€์›ํ•˜๋Š” ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. vector์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” ์›์†Œ๊ฐ€ ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ์—ฐ์†ํ•˜๊ฒŒ ์ €์žฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. vector๋Š” ์š”์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ• ๋‹นํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ์žฌํ• ๋‹นํ•˜์—ฌ ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ capacity() ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ํ•œ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” reserve() ํ•จ์ˆ˜๋„ ์ œ๊ณต๋œ๋‹ค. ์›์†Œ๊ฐ€ ์—ฐ์†ํ•˜๊ฒŒ ์ €์žฅ๋˜๋ฏ€๋กœ [] ์—ฐ์‚ฐ์ž ๋˜๋Š” at ์œผ๋กœ ์ฝ๊ธฐ์—๋Š” ๋น ๋ฅด์ง€๋งŒ insert(), erase(), push_back() ๋“ฑ์€ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

#include <vector>
vector<T> ๊ฐ์ฒด๋ช…(์ƒ์„ฑ์ž ์ธ์ˆ˜);

์ƒ์„ฑ์ž ์ธ์ˆ˜๋กœ๋Š” ๋ฒกํ„ฐ ์ปจํ…Œ์ด๋„ˆ์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ์ƒ๋žตํ•˜๋ฉด ์š”์†Œ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ๋นˆ ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ƒ์„ฑ์ž

์ƒ์„ฑ์ž

์„ค๋ช…

vector v

v๋Š” ๋นˆ ์ปจํ…Œ์ด๋„ˆ

vector v(n)

v๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

vector v(n,x)

v๋Š” x ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

vector v(v2)

v๋Š” v2 ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณต์‚ฌ๋ณธ์ด๋‹ค.(๋ณต์‚ฌ ์ƒ์„ฑ์ž ํ˜ธ์ถœ)

vector v(a,b)

v๋Š” ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)๋กœ ์ดˆ๊ธฐํ™”๋œ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

๋ฉค๋ฒ„ํ•จ์ˆ˜

ํ•จ์ˆ˜

์„ค๋ช…

v.assign(n,x)

v์— x ๊ฐ’์œผ๋กœ n๊ฐœ์˜ ์›์†Œ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

v.assign(a,b)

v๋ฅผ ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [a,b)๋กœ ํ• ๋‹น

v.at(i)

v์˜ i๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐธ์กฐ

v.front()

v์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

v.back()

v์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ฐธ์กฐ

v.capacity()

v์— ํ• ๋‹น๋œ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ

v.clear()

v์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐ

v.empty()

v๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ์กฐ์‚ฌ

p=v.begin()

p๋Š” v์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

p=v.end()

p๋Š” v์˜ ๋์„ ํ‘œ์‹ํ•˜๋Š” ๋ฐ˜๋ณต์ž

q=v.erase(p)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

q=v.erase(b,e)

๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

q=v.insert(p,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค. q๋Š” ์‚ฝ์ž…ํ•œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค.

v.insert(p,n,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— n๊ฐœ์˜ x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.

v.insert(p,b,e)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

x=v.max_size()

x๋Š” v๊ฐ€ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์›์†Œ์˜ ๊ฐœ์ˆ˜(๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ)

v.pop_back()

v์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

v.push_back()

v์˜ ๋์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

p=v.rbegin()

p๋Š” v์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค.

p=v.rend()

p๋Š” v์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ๋์„ ํ‘œ์‹ํ•˜๋Š” ๋ฐ˜๋ณต์ž

v.reserve(n)

n๊ฐœ์˜ ์›์†Œ๋ฅผ ์ €์žฅํ•  ๊ณต๊ฐ„์„ ์˜ˆ์•ฝํ•œ๋‹ค.

v.resize(n)

v์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™•์žฅ๋˜๋Š” ๊ณต๊ฐ„์˜ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•œ๋‹ค.

v.resize(n,x)

v์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™•์žฅ๋˜๋Š” ๊ณต๊ฐ„์˜ ๊ฐ’์„ x ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

v.size()

v์˜ ์›์†Œ ๊ฐฏ์ˆ˜

v.swap(v2)

v์™€ v2๋ฅผ swapํ•œ๋‹ค.

์˜ˆ์ œ

#include <iostream>
#include <vector>
using namespace std;

int main(){

    vector<int> v;
    vector<int> v2(5);    // 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ 5๊ฐœ์˜ ์›์†Œ
    // ๋ฉ”๋ชจ๋ฆฌํฌ๊ธฐ 8๋งŒํผ ํ• ๋‹น
    v.reserve(8);

    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    v.push_back(50);

    for (vector<int>::size_type i = 0; i < v.size(); ++i)
        cout << v[i] << endl;
    cout << endl;

    // ๋ฒกํ„ฐ์˜ ์›์†Œ ๊ฐฏ์ˆ˜๋ฅผ 10๊ฐœ๋กœ ํ™•์žฅ, ์ถ”๊ฐ€๋œ ๊ณต๊ฐ„์€ ๋””ํดํŠธ 0์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
    v.resize(10);                
}

์—ฌ๊ธฐ์„œ v.size()๋งŒํผ for๋ฌธ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด v.size()์˜ ํƒ€์ž…๊ณผ i ๊ฐ€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

  • vector<int>::size_type : ๋ฒกํ„ฐ์˜ size ์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ๊ฐ€์ ธ์˜จ๋‹ค (unsigned int)

deque

depue๋Š” double-ended queue๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ์–‘๋ฐฉํ–ฅ ํ์ด๋‹ค. ์ปจํ…Œ์ด๋„ˆ์˜ ์–‘ ๋์—์„œ ๋น ๋ฅด๊ฒŒ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ตฌ์กฐ

deque<T> ๋ณ€์ˆ˜๋ช…;

์ƒ์„ฑ์ž

์ƒ์„ฑ์ž

deque dq

dq๋Š” ๋นˆ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

deque dq(n)

dq๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

deque dq(n, x)

dq๋Š” x ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

deque dq(dq2)

dq๋Š” dq2 ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณต์‚ฌ๋ณธ์ด๋‹ค

deque dq(b,e)

dq๋Š” ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)๋กœ ์ดˆ๊ธฐํ™”๋œ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

Member Function

๋ฉค๋ฒ„ ํ•จ์ˆ˜

dq.assign(n,x)

dq์— x ๊ฐ’์œผ๋กœ n๊ฐœ์˜ ์›์†Œ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

dq.assign(b,e)

dq๋ฅผ ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)๋กœ ํ• ๋‹นํ•œ๋‹ค.

dq.back()

dq์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

p=lt.begin()

p๋Š” dq์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

dq.clear()

dq์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

dq.empty()

dq๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ์กฐ์‚ฌํ•œ๋‹ค.

p=dq.end()

p๋Š” dq์˜ ๋์„ ํ‘œ์‹ํ•˜๋Š” ๋ฐ˜๋ณต์ž๋‹ค

q=dq.erase(p)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

q= dq.erase(b,e)

๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋‹ค

dq.front()

dq์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

q=dq.insert(p,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค. q๋Š” ์‚ฝ์ž…ํ•œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

dq.insert(p,n,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— n ๊ฐœ์˜ x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.

dq.insert(p,b,e)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

x=dq.max_size()

x๋Š” dq๊ฐ€ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์›์†Œ์˜ ๊ฐœ์ˆ˜

dq.pop_back()

dq์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

dq.pop_front()

dq์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

dq.push_back(x)

dq์˜ ๋์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

dq.push_front(x)

dq์˜ ์•ž์ชฝ์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

p=dq.rbegin()

p๋Š” dq์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

p=dq.rend()

p๋Š” dq์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

dq.resize(n)

dq์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™•์žฅ๋˜๋Š” ๊ณต๊ฐ„์˜ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

dq.resize(n,x)

dq์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™•์žฅ๋˜๋Š” ๊ณต๊ฐ„์˜ ๊ฐ’์„ x ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

dq.size()

dq ์›์†Œ์˜ ๊ฐฏ์ˆ˜๋‹ค

dq.swap(dq2)

dq์™€ dq2๋ฅผ swap ํ•œ๋‹ค.

์˜ˆ์ œ

#include <iostream>
#include <vector>
#include <deque>

using namespace std;

int main(){
    // deque ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
    deque<int> dq;
    dq.push_back(20);
    dq.push_back(30);
    dq.push_front(10);

    cout << "deque : ";
    copy(dq.begin(), dq.end(), ostream_iterator<int>(cout," "));

    dq.pop_front();
    cout << "deque : ";
    deque<int>::iterator iter;
    for(iter=dq.begin();iter!=dq.end();++iter){
        cout << * iter << ' ';
    }
    cout << endl;
}

list

STL List๋Š” double linked list, forward_list๋Š” single linked list์™€ ๊ฐ™๋‹ค.

  • list๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ๋กœ at()๊ณผ [] ์—ฐ์‚ฐ์ž๊ฐ€ ์—†์œผ๋ฉฐ ์ž„์˜ ์ ‘๊ทผ ๋ฐ˜๋ณต์ž๊ฐ€ ์•„๋‹Œ ์–‘๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(++, --)๋ฅผ ์ œ๊ณต

  • ์ค‘๊ฐ„์— ์›์†Œ๋ฅผ ์‚ฝ์ž…(insert), ์ œ๊ฑฐ(erase) ํ•˜๋”๋ผ๋„ ์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋ณต์žก๋„(O(n))์˜ ์ˆ˜ํ–‰ ์„ฑ๋Šฅ

๊ตฌ์กฐ

template < class T, class Allocator = allocator<T> > class list;
list<int> intList;
list<string> stringList;

์ƒ์„ฑ์ž

์ƒ์„ฑ์ž

list lt

lt๋Š” ๋นˆ ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค.

list lt(n)

lt๋Š” ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

list lt(n, x)

lt๋Š” x ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

list lt(lt2)

lt๋Š” lt2 ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณต์‚ฌ๋ณธ์ด๋‹ค

list lt(b,e)

lt๋Š” ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)๋กœ ์ดˆ๊ธฐํ™”๋œ ์›์†Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.

Member Function

๋ฉค๋ฒ„ ํ•จ์ˆ˜

lt.assign(n,x)

lt์— x ๊ฐ’์œผ๋กœ n๊ฐœ์˜ ์›์†Œ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

lt.assign(b,e)

lt๋ฅผ ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)๋กœ ํ• ๋‹นํ•œ๋‹ค.

lt.back()

lt์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

p=lt.begin()

p๋Š” lt์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

lt.clear()

lt์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

lt.empty()

lt๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ์กฐ์‚ฌํ•œ๋‹ค.

p=lt.end()

p๋Š” lt์˜ ๋์„ ํ‘œ์‹ํ•˜๋Š” ๋ฐ˜๋ณต์ž๋‹ค

q=lt.erase(p)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

q= lt.erase(b,e)

๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. q๋Š” ๋‹ค์Œ ์›์†Œ๋‹ค

lt.front()

lt์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

q=lt.insert(p,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค. q๋Š” ์‚ฝ์ž…ํ•œ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

lt.insert(p,n,x)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— n ๊ฐœ์˜ x ๊ฐ’์„ ์‚ฝ์ž…ํ•œ๋‹ค.

lt.insert(p,b,e)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— ๋ฐ˜๋ณต์ž ๊ตฌ๊ฐ„ [b,e)์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.

x=lt.max_size()

x๋Š” lt๊ฐ€ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์›์†Œ์˜ ๊ฐœ์ˆ˜

lt.merge(lt2)

lt2๋ฅผ lt๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌํ•œ๋‹ค.

lt.merge(lt2, pred)

lt2๋ฅผ lt๋กœ ํ•ฉ๋ณ‘ ์ •๋ ฌํ•œ๋‹ค. pred(์กฐ๊ฑด์ž)๋ฅผ ๊ฐ€์ง€๋ˆ„์œผ๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค.

lt.pop_back()

lt์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

lt.pop_front()

lt์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

lt.push_back(x)

lt์˜ ๋์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

lt.push_front(x)

lt์˜ ์•ž์ชฝ์— x๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

p=lt.rbegin()

p๋Š” lt์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

lt.remove(x)

x ์›์†Œ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค.

lt.remove_if(pred)

pred(๋‹จํ•ญ ์กฐ๊ฑด์ž)๊ฐ€ '์ฐธ'์ธ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

p=lt.rend()

p๋Š” lt์˜ ์—ญ ์ˆœ์ฐจ์—ด์˜ ์ฒซ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋‹ค

lt.resize(n)

lt์˜ ํฌ๊ธฐ๋ฅผ n์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํ™•์žฅ๋˜๋Š” ๊ณต๊ฐ„์˜ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

lt.reverse()

lt ์ˆœ์ฐจ์—ด์„ ๋’ค์ง‘๋Š”๋‹ค.

lt.size()

lt ์›์†Œ์˜ ๊ฐฏ์ˆ˜๋‹ค

lt.sort()

lt์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์˜ค๋ฆ„ ์ฐจ์ˆœ ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

lt.sort(pred)

lt์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ pred(์กฐ๊ฑด์ž)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.

lt.splice(p, lt2)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— lt2์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ์ž˜๋ผ ๋ถ™์ธ๋‹ค.

lt.splice(p, lt2, q)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— lt2์˜ q๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์›์†Œ๋ฅผ ์ž˜๋ผ ๋ถ™์ธ๋‹ค.

lt.splice(p, lt2, b, e)

p๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์— lt2์˜ ์ˆœ์ฐจ์—ด [b,e)๋ฅผ ์ž˜๋ผ ๋ถ™์ธ๋‹ค.

lt.swap(lt2)

lt์™€ lt2๋ฅผ swap ํ•œ๋‹ค.

lt.unique()

์ธ์ ‘ํ•œ ์›์†Œ์˜ ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ์œ ์ผํ•œ ์›์†Œ์˜ ์ˆœ์ฐจ์—ด๋กœ ๋งŒ๋“ ๋‹ค.

lt.unique(pred)

์ธ์ ‘ํ•œ ์›์†Œ๊ฐ€ pred(์ดํ•ญ ์กฐ๊ฑด์ž)์˜ ๊ธฐ์ค€์— ๋งž๋‹ค๋ฉด ์œ ์ผํ•œ ์›์†Œ์˜ ์ˆœ์ฐจ์—ด๋กœ ๋งŒ๋“ ๋‹ค

์˜ˆ์ œ

#include <iostream>
#include <list>
using namespace std;

int main(){

    list<int> list1;

    list1.push_back(10);
    list1.push_back(20);
    list1.push_back(30);
    list1.push_back(40);
    list1.push_back(50);

    list<int>::iterator iter;
    for (iter = list1.begin(); iter != list1.end(); ++iter){
        cout << *iter << ' ';
    }
    cout << endl;
  // 10 20 30 40 50

    // erase ์‚ญ์ œ
      iter = list1.begin();
    iter++;
    iter++;

    list<int>::iterator iter2 = list1.erase(iter);
    for (iter = list1.begin(); iter != list1.end(); ++iter){
        cout << *iter << ' ';
    }
    cout << endl;
      // 10 20 40 50


    cout << "iter2 : " << *iter2 << endl;
      // iter2 : 40

    list1.push_back(10);
    list1.push_back(10);

    for (iter = list1.begin(); iter != list1.end(); ++iter){
        cout << *iter << ' ';
    }
    cout << endl;
       // 10 20 40 50 10 10

    // ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œ 10 ์ œ๊ฑฐ
    list1.remove(10);

    for (iter = list1.begin(); iter != list1.end(); ++iter){
        cout << *iter << ' ';
    }
    cout << endl;
      // 20 40 50

    return 0;
}

forward_list

  • <forward_list> ํ—ค๋”์— ์กด์žฌํ•œ๋‹ค.

  • ๋‹จ์ˆœ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋งŒ๋“  sequence container

  • ๋‹จ๋ฐฉํ–ฅ๋ฆฌ์ŠคํŠธ๋กœ๋งŒ ์ถฉ๋ถ„ํ•œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ(ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์ด๋™ ๊ฐ€๋Šฅํ•˜๋‹ค.)

  • std::list ๋ณด๋‹ค ์‚ฝ์ž…/์‚ญ์ œ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์ ๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.(์ฐจ์ด๋Š” ํฌ์ง€ ์•Š๋‹ค.)

๊ตฌ์กฐ

template< class T, class Allocator = std::allocator<T> > class forward_list;
forward_list<int> singleList;

ํŠน์ง•

  1. ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด forward_list๋Š” ๊ธฐ์กด์˜ list์˜ ์„ค๊ณ„์— ๋งž์ถ˜๋‹ค.

  2. std::list์˜ insert์™€ erase๋ฅผ forward_list์—์„œ ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง€๊ณ  ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ์ข‹์ง€ ์•Š์•„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

  3. ๋‹ค๋ฅธ STL์˜ container์— ์žˆ๋Š” size ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด์œ ๋Š” ์š”์†Œ ์ˆ˜๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฉค๋ฒ„๋ฅผ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด C์–ธ์–ด์—์„œ ๊ตฌํ˜„ํ•œ ๊ฒƒ๊ณผ ๋น„๊ตํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋Ÿฐ ๋ฉค๋ฒ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด์„œ size ํ•จ์ˆ˜๋ฅผ ์ง€์›ํ•˜๋ฉด ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ์š”์†Œ๋ฅผ ์„ธ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ณ„์‚ฐ๋Ÿ‰์ด O(N)์ด ๋œ๋‹ค.

๋ฉค๋ฒ„ ๋ณ€์ˆ˜

Member types

Member type

Definition

value_type

T

allocator_type

ํ• ๋‹น์ž

size_type

๋ถ€ํ˜ธ ์—†๋Š” ์ •์ˆ˜(unsigned int) ํƒ€์ž… (์ผ๋ฐ˜์ ์œผ๋กœ std::size_t)

difference_type

๋ถ€ํ˜ธ ์žˆ๋Š” ์ •์ˆ˜(signed int) ํƒ€์ž… (๋ณดํ†ต std::ptrdiff_t)

reference

value_type&

const_reference

const value_type&

pointer

std::allocator_traits<Allocator>::pointer

const_pointer

std::allocator_traits<Allocator>::const_pointer

iterator

ForwardIterator

const_iterator

์ƒ์ˆ˜(constant) ์–‘๋ฐฉํ–ฅ ๋ฐ˜๋ณต์ž(iterator)

Member Function

Member Function

์„ค๋ช…

assign

์ปจํ…Œ์ด๋„ˆ์— ๊ฐ’์„ ํ• ๋‹น

befor_begin cbefore_begin

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์š”์†Œ์— ๋ฐ˜๋ณต์ž(iterator)๋ฅผ ๋ฐ˜ํ™˜

begin cbegin

์ฒซ๋ฒˆ์งธ ์›์†Œ์˜ ๋ฐ˜๋ณต์ž(iterator)๋ฅผ ๋ฐ˜ํ™˜

end cend

๋งˆ์ง€๋ง‰ ์›์†Œ๋กœ์˜ ๋ฐ˜๋ณต์ž(iterator) ๋ฐ˜ํ™˜

empty

ํ˜„์žฌ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ

max_size

์›์†Œ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

clear

๋ชจ๋‘ ์‚ญ์ œ

resize

์‚ฌ์ด์ฆˆ ๋ณ€๊ฒฝ

insert_after

์‚ฝ์ž…

erase_after

์‚ญ์ œ

push_front

์ƒˆ๋กœ์šด ์›์†Œ๋ฅผ ์•ž์— ์‚ฝ์ž…

pop_front

์ฒซ๋ฒˆ์งธ ์›์†Œ ์‚ญ์ œ

swap

์›์†Œ๋“ค์„ ์„œ๋กœ ๊ตํ™˜

remove remove_if

์กฐ๊ฑด์‚ญ์ œ

unique

์ค‘๋ณต์š”์†Œ ์‚ญ์ œ

reverse

์ „ํ™˜(์—ญ์œผ๋กœ ๋ฐ”๊ฟˆ)

merge

๋ณ‘ํ•ฉ

sort

์ •๋ ฌ

splice_after

ํ•ด๋‹น ์š”์†Œ๋ฅผ ์›๋ณธ ์ˆœ๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ์—์„œ ์‚ญ์ œํ•˜๊ณ , ๋Œ€์ƒ ์ˆœ๋ฐฉํ–ฅ ๋ฆฌ์ŠคํŠธ์˜ ์ง€์ •๋œ ์œ„์น˜์— ์‚ฝ์ž…

์˜ˆ์‹œ

#include <iostream>
#include <forward_list>

using namespace std;

int main(){
  // forward_list ๊ฐ์ฒด์˜ ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐํ™”
    forward_list<int> singleList = {10, 20, 400, 30}; 
    forward_list<int> singleList2 = {40, 50};
    forward_list<int>::iterator itr;
    // ๊ฐ’์ด 400์ธ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ญ์ œํ•จ.
    singleList.remove(400);              

  // singleList ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋ฐ˜๋ณต์ž๋ฅผ ์ดˆ๊ธฐํ™”
    itr = singleList.begin();            

  //singleList2 ๋ชจ๋“  ์š”์†Œ๋ฅผ singleList ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋‹ค์Œ์— ์‚ฝ์ž…
    singleList.splice_after(itr, singleList2); 

}

์ฐธ์กฐํŽ˜์ด์ง€

Last updated