๐Ÿ“š List

List ์ •๋ฆฌ


๐Ÿ“š List๋ž€?

  • C++์—์„œ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” STL ์ปจํ…Œ์ด๋„ˆ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • List๋Š” ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ์œผ๋ฉฐ ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ์š”์†Œ๊ฐ€ ๋‘๊ฐœ์˜ ํฌ์ธํŠธ๋ฅผ ๊ฐ€์ง„๋‹ค(์ด์ „๋…ธ๋“œ์™€ ๋‹ค์Œ๋…ธ๋“œ)

๐Ÿ”Ž ์ฃผ์š”ํŠน์ง•

  1. ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
    • ๊ฐ ์š”์†Œ๋Š” ์ด์ „๋…ธ๋“œ์™€ ๋‹ค์Œ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
    • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋กœ ์•ž ๋’ค ์–‘๋ฐฉํ–ฅ์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ๋™์  ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • ์ฆ‰, ๋ฆฌ์ŠคํŠธ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์–ด ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์‚ฝ์ž…, ์‚ญ์ œํ•  ๋•Œ ํฌ๊ธฐ ๋ณ€๊ฒฝ์ด ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  3. ๋น„์—ฐ์† ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น
    • ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ ์š”์†Œ๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ์š”๊ตฌํ•˜๋Š” ๋ฐฐ์—ด๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ, ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ์ƒ์— ํฉ์–ด์ ธ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ’ป ๊ธฐ๋ณธ ์—ฐ์‚ฐ

  1. ํ—ค๋”
    #include <list>
    
  2. ์ƒ์„ฑ
    list<ํƒ€์ž…> ๋ณ€์ˆ˜๋ช…;
    
  3. ์‚ฝ์ž…
    list.push_back(10); //๋ฆฌ์ŠคํŠธ ๋’ค์— 10 ์‚ฝ์ž…
    list.push_front(20); // ๋ฆฌ์ŠคํŠธ ์•ž์— 20 ์‚ฝ์ž…
    
  4. ์‚ญ์ œ
    list.pop_front(); // ๋ฆฌ์ŠคํŠธ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ
    list.pop_back(); // ๋ฆฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ
    
  5. ์ˆœํšŒ
    • ๋ฆฌ์ŠคํŠธ๋Š” iterator(๋ฐ˜๋ณต์ž)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆœํšŒ
      list.begin(); // ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜
      list.end(); // ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜
      
  • list์—์„œ end()๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํŠน์ˆ˜ํ•œ ์œ„์น˜ ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋ฆฌ์ŠคํŠธ์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” iterator(๋ฐ˜๋ณต์ž)์ด๋‹ค.
  1. ํฌ๊ธฐ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
    list.empty(); //๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ true์™€ false ๊ฐ’์„ ์ถœ๋ ฅํ•จ
    list.size(); // ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ ํ™•์ธ
    
  2. ๋‹ค์–‘ํ•œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜
    list.clear(); // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    list.insert(); // ํŠน์ • ์œ„์น˜์— ์š”์†Œ ์‚ฝ์ž…
    list.erase(); // ํŠน์ • ์œ„์น˜์˜ ์š”์†Œ ์‚ญ์ œ
    list.resize(); // ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝ
    list.sort(); // ๋ฆฌ์ŠคํŠธ ์ •๋ ฌ
    

๐Ÿ’ป ์˜ˆ์‹œ

#include <iostream>
#include <list>

using namespace std;

int main()
{
    list<int> myList = {10, 20, 30};


    //์š”์†Œ ์ถ”๊ฐ€
    myList.push_back(40); // ๋ฆฌ์ŠคํŠธ ๋’ค์— 40 ์‚ฝ์ž…
    myList.push_front(1); // ๋ฆฌ์ŠคํŠธ ์•ž์— 1 ์‚ฝ์ž…

    //์ˆœํšŒ
    for(auto it = myList.begin(); it != myList.end(); ++it)
    {
        cout << *it << endl;
    }
    // it ์€ ํฌ์ธํ„ฐ๊ฐ€ ์•„๋‹Œ๋ฐ ์–ด๋–ป๊ฒŒ ์—ญ์ฐธ์กฐ๋ฅผ ๋ฐ”๋กœํ•  ์ˆ˜ ์žˆ์„๊นŒ?
    // ์ด์œ ๋Š” list์˜ iterator(๋ฐ˜๋ณต์ž)๊ฐ€ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    //๋ฐ˜๋ณต์ž๋Š” ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ญ์ฐธ์กฐ, ์ฆ๊ฐ€, ๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค

    // ++it VS it++
    // ๋‘˜์ด ๋งˆ์ง€๋ง‰ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์ฐจ์ด๋Š” ์—†์Œ
    // ํ•˜์ง€๋งŒ ์ตœ์ ํ™”์—์„œ ๊ทน๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Œ
    // it++ ์€ ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์›๋ž˜ ๊ฐ’์„ ์ €์žฅํ•œ ํ›„, ์ด๋™์—ฐ์‚ฐ์„ ํ•จ
    // ++it ์€ ๋ฐ”๋กœ ๋ฐ˜๋ณต์ž๋ฅผ ๋‹ค์Œ ์œ„์น˜๋กœ ์ด๋™ํ•œ ํ›„, ์ด๋™๋œ ๋ฐ˜๋ณต์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    //it++ ์€ ์ž„์‹œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ! 
    //๊ทธ๋ž˜์„œ ๋ฐ˜๋ณต๋ฌธ๋‚ด์—์„œ ๋ฐ˜๋ณต์ž๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ญ์ƒ '++๋ณ€์ˆ˜'๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    //์‚ฌ์ด์ฆˆ์˜ ํฌ๊ธฐ
    myList.size();

    //๋ฆฌ์ŠคํŠธ์—์„œ ์š”์†Œ ์‚ญ์ œ
    myList.pop_front(); // ๋ฆฌ์ŠคํŠธ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์‚ญ์ œ
    myList.pop_back(); // ๋ฆฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์‚ญ์ œ

    return 0;
}



๐Ÿ“Œ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

  • ๋น ๋ฅธ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ : (O(n)) ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„
  • ๋™์  ํฌ๊ธฐ : ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ์œ ๋™์ ์œผ๋กœ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ • ๊ฐ€๋Šฅํ•จ

๋‹จ์ 

  • ๋А๋ฆฐ ์ ‘๊ทผ : ๋ฐฐ์—ด๋ณด๋‹ค ๋А๋ฆผ, ์š”์†Œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ ‘๊ทผํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ (O(n)) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ : ์•ž, ๋’ค ๋…ธ๋“œ์˜ ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์— ๋น„ํ•ด ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉ