📜  如何删除堆栈c ++中的重复元素(1)

📅  最后修改于: 2023-12-03 14:52:09.232000             🧑  作者: Mango

如何删除堆栈C++中的重复元素

对于堆栈C++中的重复元素,我们可以通过一些方法进行删除,这里我将介绍两种常用的方法。

方法一:使用STL库函数

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会自动去重,我们再将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++中重复元素的方法,二者各有优缺点,需要根据具体情况选择使用。