빈 컨테이너의 경우 begin()과 end()는 서로 같은 값을 가진다.
list<int> li;
auto it = li.begin();
for (auto i = li.begin(); i == li.end();)
{
cout << "무한 루프";
}
// 컴파일 옵션
// g++ -std=c++17 -O0 -o stl_list1 .\stl_list.cpp
begin()과 end()가 같은 빈 컨테이너의 경우, 증가와 감소같은 연산은 정의하지 않은 행동으로
예측하지 못한 값 등이 나온다. 가능한 이러한 경우는 회피하자.
응용
http://boj.kr/49ff74ffdded4e0381138dabbaf8405b
Authored by : BaaaaaaaaaaarkingDog
백준 키로거 문제. BaaaaaaaaaaarkingDog 님의 코드를 빌려왔습니다.
for (int i = 0; i < n; i++) {
list<char> L = {};
string s;
auto p = L.begin();
cin >> s;
for (auto c : s) {
if (c == '<') {
if (p != L.begin()) p--; // 컨테이너가 비어있을 경우 begin()과 end()가 같아
} // 해당 조건에서 false가 일어난다.
else if (c == '>') {
if (p != L.end()) p++;
}
else if (c == '-') {
if (p != L.begin()) {
p--;
p = L.erase(p);
}
}
else
L.insert(p, c);
}
다음 글들을 참고하였습니다.
https://stackoverflow.com/questions/25600484/c-empty-container-iterator-behaviour
https://stackoverflow.com/questions/10793404/behaviour-of-stdlistbegin-when-list-is-empty
https://stackoverflow.com/questions/39820041/is-it-allowed-to-increment-an-end-iterator
읽어주셔서 감사합니다. 틀린 부분이나 부족한 부분이 있어 알려주신다면 감사하겠습니다.
'알고리즘 부셔버렷 > 나만의 작은 STL정보' 카테고리의 다른 글
[C++ STL] lower_bound, upper_bound 요약 설명 (실전 알고리즘) (0) | 2022.07.27 |
---|---|
[STL] 부분조합 구하기 (prev_permutation과 bool 배열을 응용) (0) | 2022.06.14 |
[STL] erase remove idiom (설명, erase, remove 차이, 예) (0) | 2022.06.09 |
[STL] next_premutation() (STL 순열 ) (0) | 2022.06.01 |
문자열 문제에서 유용한 STL 함수 (0) | 2022.05.27 |
댓글