#include <list> // std::list를 쓰기 위한 헤더
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 입출력 속도를 향상시킨다.
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
std::list<char> list;
std::list<char>::iterator iter;
string a;
cin >> a;
// std::list<char> list (a.begin(), a.end()); // 아래의 반복문과 같은 역활을 한다.
for (int i = 0; i < a.length(); ++i)
{
list.push_back(a[i]);
}
iter = list.end();
int counts;
cin >> counts;
for (int i = 0; i < counts; ++i)
{
char b;
cin >> b;
switch (b)
{
case 'L': // 커서를 왼쪽으로 한칸 옮김
if (iter != list.begin())
{
--iter;
}
break;
case 'D': // 커서를 오른쪽으로 한칸 옮김
if (iter != list.end())
{
++iter;
}
break;
case 'B': // 커서 왼쪽에 있는 문자를 삭제함
if (iter != list.begin())
{
iter = list.erase(--iter);
}
break;
case 'P': // $라는 문자를 커서왼쪽에 추가함
char input;
cin >> input;
list.insert(iter, input);
break;
}
}
for (iter = list.begin(); iter != list.end(); ++iter)
{
cout << *iter;
}
}
입력한 string 문자열을 list에 담을 생각도 하지 못했다.
std::list<char> list (a.begin(), a.end());
을 해주면 list에 a문자열의 시작부터 끝까지를 넣는거다.
iterator를 포인터처럼 사용한다고 생각하면 조금 편할 것 같다.
물론 iterator는 포인터가 아니긴하다.
iter = list.erase(--iter)는 erase의 반환 타입이 iterator 이기에 iter에 담아주어야 한다.