๐ List
List ์ ๋ฆฌ
๐ List๋?
- C++์์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ๋ค๋ฃจ๋ STL ์ปจํ ์ด๋์ค ํ๋์ด๋ค.
- List๋ ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๊ตฌํ๋์ด์์ผ๋ฉฐ ๋ฆฌ์คํธ๋ ๊ฐ์์๊ฐ ๋๊ฐ์ ํฌ์ธํธ๋ฅผ ๊ฐ์ง๋ค(์ด์ ๋ ธ๋์ ๋ค์๋ ธ๋)
๐ ์ฃผ์ํน์ง
- ์๋ฐฉํฅ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
- ๊ฐ ์์๋ ์ด์ ๋ ธ๋์ ๋ค์๋ ธ๋์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๋ค.
- ์ด๋ฌํ ๊ตฌ์กฐ๋ก ์ ๋ค ์๋ฐฉํฅ์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ์ํํ ์ ์๋ค.
- ๋์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
- ์ฆ, ๋ฆฌ์คํธ๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ณ๊ฒฝ๋ ์ ์์ด ๋ฐฐ์ด๊ณผ ๋ฌ๋ฆฌ ์ฝ์ , ์ญ์ ํ ๋ ํฌ๊ธฐ ๋ณ๊ฒฝ์ด ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
- ๋น์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ๋ฆฌ์คํธ๋ ๊ฐ ์์๊ฐ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋๋ค. ๋ฐ๋ผ์ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์๊ตฌํ๋ ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅด๊ฒ, ๋ฆฌ์คํธ์ ์์๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ํฉ์ด์ ธ ์์ ์ ์๋ค.
๐ป ๊ธฐ๋ณธ ์ฐ์ฐ
- ํค๋
#include <list> - ์์ฑ
list<ํ์ > ๋ณ์๋ช ; - ์ฝ์
list.push_back(10); //๋ฆฌ์คํธ ๋ค์ 10 ์ฝ์ list.push_front(20); // ๋ฆฌ์คํธ ์์ 20 ์ฝ์ - ์ญ์
list.pop_front(); // ๋ฆฌ์คํธ ์ฒซ๋ฒ์งธ ์์ ์ ๊ฑฐ list.pop_back(); // ๋ฆฌ์คํธ ๋ง์ง๋ง ์์ ์ ๊ฑฐ - ์ํ
- ๋ฆฌ์คํธ๋ iterator(๋ฐ๋ณต์)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ
list.begin(); // ๋ฆฌ์คํธ์ ์ฒซ๋ฒ์งธ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํ list.end(); // ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์ ๋ค์์ ๊ฐ๋ฆฌํค๋ ๋ฐ๋ณต์๋ฅผ ๋ฐํ
- ๋ฆฌ์คํธ๋ iterator(๋ฐ๋ณต์)๋ฅผ ์ฌ์ฉํ์ฌ ์ํ
- list์์ end()๋ ๋ฆฌ์คํธ์ ๋ง์ง๋ง ์์ ๋ค์์ ๊ฐ๋ฆฌํค๋ ํน์ํ ์์น ๋ฅผ ๋ํ๋ธ๋ค.
- ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋๋ฉฐ ๋ฆฌ์คํธ์ ๋์ ๋ํ๋ด๋ iterator(๋ฐ๋ณต์)์ด๋ค.
- ํฌ๊ธฐ๊ฐ ๋น์ด์๋์ง ํ์ธ
list.empty(); //๋ฆฌ์คํธ๊ฐ ๋น์ด์๋์ง ํ์ธ true์ false ๊ฐ์ ์ถ๋ ฅํจ list.size(); // ๋ฆฌ์คํธ ํฌ๊ธฐ ํ์ธ - ๋ค์ํ ๋ฉค๋ฒ ํจ์
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)) ์ ์๊ฐ๋ณต์ก๋
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ : ์, ๋ค ๋ ธ๋์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ๋นํด ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉ