这是栈的一种应用,利用两个栈的后进先出原理,实现光标位置的移动。
字符的输入是从左到右,而一旦输入完成,光标移动则是由两个栈之间相互出栈入栈完成,保证光标移动时任意时刻字母的顺序不变。
代码没有给出栈的实现,可以看这里:栈的实现
//用两个栈代表光标左侧和光标右侧
//插入左侧栈,向左移动左栈出,右栈入,反之亦然。
//删除从左侧栈删。
struct Buffer
{
Buffer() = default;
void insert(char c) { StaA.push(c); }
char del() { return StaA.pop(); }
void left(int k)
{
for (size_t i = 0; i != k; ++i)
{
StaB.push(StaA.pop());
}
}
void right(int k)
{
for (size_t i = 0; i != k; ++i)
{
StaA.push(StaB.pop());
}
}
int size() { return StaA.size() + StaB.size(); }
private:
Stack<char> StaA;
Stack<char> StaB;
};
using std::string;
using std::vector;
int main(int argc, char *argv[])
{
Buffer bf;
string word = "asdfghjkl";
for (auto &&i : word)
{
bf.insert(i);
}
bf.left(4);
std::cout << bf.del() << " " << bf.size();
return 0;
}