#include < list >
list<자료형> [변수이름];
list<int> list1;
list<char> list2 = {'a','b'};
list<string> list3;
list<자료형> 변수이름;
list<char> list1(5); // 디폴트 값 : ' ' => { , , , , }
list<int> list2(7); // 디폴트 값 : 0 => {0, 0, 0, 0, 0, 0, 0}
list<double> list3(3);
예제
#include <iostream>
#include <list>
using namespace std;
int main()
{
int n = 4;
list<double> list_double(n);
list<char> list_char(3);
for(double val : list_double)
cout << val << ","
}
list<자료형> 변수이름(a,b)
a : 데이터 개수 , b : 데이터 값 ( 데이터 b를 a개만큼 초기화 )
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> list_int(4,3); // 3 3 3 3
for(int val : list_int)
cout << val << ",";
cout << endl;
return 0;
}
list<타입> [변수이름]{ ..채울 값.. };
#include < iostream >
#include < list >
using namespace std;
int main()
{
list<int> list_int{2,3,4,5};
for(int val : list_int)
cout << val << " ";
return 0;
}
리스트변수 . assign(a,b)
a : 데이터 개수, b : 데이터 값 ( 데이터 b를 a개 만큼 초기화 )
#include <iostream>
#include <list>
using namespace std;
int main()
{
list<int> list1;
list1.assign(4,3); // 3 3 3 3
for(int val : list1)
cout << val << " ";
cout << endl;
return 0;
}
list<타입> list1(list2)
list2 에다 list1 을 복사
list<int> origin_list{2,3,4,5};
list<int> new_list(origin_list); // 2 3 4 5 그대로 복사
list<타입> list1 = list2;
list<int> origin_list{2,3,4,5};
list<int> new_list = origin_list;
list<int> origin_list{2,3,4,5};
list<int> new_list( origin_list.begin(), orgin_list.end() ); // iterator를 이용해서 복사
// 가능
vector<int> vector1{1,2,3,4,5,6,7,8,9,10};
vector<int> vector2( vector1.begin() + 1, vector1.begin() + 4);
// 컴파일 에러
list<int> list1{1,2,3,4,5,6,7,8,9,10};
list<int> list2( list1.begin() + 1, list1.begin() + 4); // list는 이렇게 구간을 잘라서 중간 요소들을 복사하는 것이 불가능하다.
이렇게 하면 vector1의 2~4번째 원소가 vector2에 복사된다.
list == list2
list1 != list2
list1 = list2
list1 > list2
list1 >= list2
list1 < list2
list1 <= list2
list<int> list{2,3,4};
list<int> list{4,1};
cout << (list1 < list2) >> endl; // true
1.iterator(반복자)
2.추가 및 삭제
3.조회
4.기타
예제1
int main(void)
{
list<int> L = {1,2};
list<int>::iterator t = L.begin(); // t는 1를 가리키는 중
// => auto t = L.begin(); 으로 써도 됌
L.push_front(10) // 10 1 2
cout << *t << '\n'; // t가 가리키는 값 = 1을 출력
L.push_back(5); // 10 1 2 5
L.insert(t, 6); // 10 6 1 2 5 => t가 가리키는 곳 앞에 6을 삽입
t++; t를 1칸 앞으로 전진, 현재 t가 가리키는 값은 2
t = L.erase(t); // t가 가리키는 값을 제거, 그 다음 원소인 5의 위치를 리턴
cout << *t << '\n'; // 5
for(auto i : L) // 10 6 1 5
cout << i << ' ';
cout << '\n';
for(list<int>::iterator it = L.begin(); it != L.end(); it++)
cout << *it << ' ';
}
예제2
int main(void)
{
list<int> l;
l.push_back(5);
l.push_back(6);
l.push_back(7);
l.push_back(8);
l.push_back(9);
l.push_back(10);
l.pop_back();
l.push_front(4);
l.push_front(3);
l.push_Front(1);
l_push_front(0);
l.pop_front();
cout << "list front value:" << l.front() << '\n';
cout << "list end value:" << l.end() << '\n';
cout << "list size:" << l.size() << '\n';
cout << "Is it empty?:" << ( l.empty() ? "YES" : "NO") << '\n';
list<int>::iterator begin_iter = l.begin();
// auto begin_iter = l.begin() 도 가능(동일한 표현)
list<int>::iterator end_iter = l.end();
// auto end_ter = l.end() 도 가능(동일한 표현)
begin iter++; // 2번쨰를 가리키는 iterator
l.insert(begin_iter, 2);
end_iter--; // 마지막 원소를 가리키는 iterator
l.erase(end_iter);
// iterator: 원소 접근
cout << "list" << distance(l.begin(), begin_iter) + 1 << "element:"
<< being_iter << '\n';
}
예제3
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
list<int> L;
auto cursor = L.begin();
for(int i=1; i<=n; i++){
L.push_back(i); //1 2 3 4 5 6 7 출력
cout << "1cursor:" << *cursor << endl;
}
cursor--; // iterator : end -> 7
cursor--; // iterator : 7 -> 6
for(int i = n+1; i <= n+3; i++){
L.push_back(i); // 6 6 6 출력
cout << "2cursor:" << *cursor << endl;
}
}