📅  最后修改于: 2023-12-03 14:52:09.232000             🧑  作者: Mango
对于堆栈C++中的重复元素,我们可以通过一些方法进行删除,这里我将介绍两种常用的方法。
STL库函数中已经提供了对于去重的支持,我们只需要使用std::unique()
函数即可。
std::stack<int> s;
// 假设s已经有一些元素
std::vector<int> v;
while (!s.empty()) {
v.push_back(s.top());
s.pop();
}
std::reverse(v.begin(), v.end());
v.erase(std::unique(v.begin(), v.end()), v.end());
for (const auto& i : v) {
s.push(i);
}
在这里,我们将stack
中的元素先保存到vector
中,在vector
中去重,然后重新保存到stack
中。其中std::unique()
函数会返回去重后的区间的末尾迭代器,我们需要将其和vector
的真实末尾迭代器一起传入std::erase()
函数从而将重复元素删除。
使用set
容器可以大大简化代码,我们可以直接将元素保存到set
中,由于set
会自动去重,我们再将set
中的元素重新保存到stack
中即可。
std::stack<int> s;
// 假设s已经有一些元素
std::set<int> st;
while (!s.empty()) {
st.insert(s.top());
s.pop();
}
for (const auto& i : st) {
s.push(i);
}
在这里,我们使用了std::set
容器的自动去重特性,将stack
中的元素保存到set
中,在将set
的元素重新保存到stack
中。
以上就是两种处理堆栈C++中重复元素的方法,二者各有优缺点,需要根据具体情况选择使用。