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

Was this helpful?