#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>a;
a.push(10);
a.push(6);
a.push(4);
a.push(20);
a.push(15);
stack<int>b;
for(int i=a.size()-1; i>=0; i--)
{
int count = a.top();
a.pop();
if(count != 4)
{
b.push(count);
}
}
while(!b.empty())
{
cout<<b.top()<<" ";
b.pop();
}
return 0;
}
12 个解决方案
#1
说下思路,先把数据全部抛出来,删除某个,再重新压进去
#2
栈本就是先进先出的数据结构,你想删除中间的某个值,那就必须把栈顶部的值都放出去存储起来,然后再入栈存进来。
如果不借用stack,那就借用vector,入栈的时候用反向迭代器访问vector。
不过还不如用stack。
如果不借用stack,那就借用vector,入栈的时候用反向迭代器访问vector。
不过还不如用stack。
#3
无语!这你还用stack干什么?你的选择可能有问题?你不该用stack。如果非要这么用,自己重载一个。
#4
我记得好像可以用stack 去初始化一个vector 反正都是容器,你从vector删除stack就可以了,但是貌似,你用stack构造vector,然后用vector构造stack,会两次构造函数,这样会导致略慢
#5
#include <iostream>
#include <stack>
using namespace std;
template <class T>
class mystack :public stack<T>
{
public:
void mypop(T num)
{
this->c.erase(c.begin()+1);
}
};
int main()
{
mystack<int> sta;
sta.push(1);
sta.push(2);
sta.mypop(1);
int b = sta.top();
cout << "b = " <<b<< endl;
return 0;
}
代码有点丑陋 意思说明白了。
stack内部实现是STL容器(list或者其他),是保护成员。
继承stack,通过子类的成员函数操作stack内部容器就行。
#include <stack>
using namespace std;
template <class T>
class mystack :public stack<T>
{
public:
void mypop(T num)
{
this->c.erase(c.begin()+1);
}
};
int main()
{
mystack<int> sta;
sta.push(1);
sta.push(2);
sta.mypop(1);
int b = sta.top();
cout << "b = " <<b<< endl;
return 0;
}
代码有点丑陋 意思说明白了。
stack内部实现是STL容器(list或者其他),是保护成员。
继承stack,通过子类的成员函数操作stack内部容器就行。
#6
如果有从中间删除元素的需求,那就不应该选择stack。
#7
原理上讲只能这样做
#8
我这个程序是练习stack的,所以没用vector.
#9
按照这个提示,我试着写了一下,但是感觉自己写得好复杂。
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>a;
a.push(10);
a.push(6);
a.push(4);
a.push(20);
a.push(15);
stack<int>b;
int count[a.size()-1];
int n = 0;
int num;
for(int i=a.size()-1; i>=0; i--)
{
num = a.top();
if(num != 4)
{
count[n] = num;
n++;
}
a.pop();
}
for(int i=0; i<n; i++)
{
a.push(count[i]);
}
while(!(a.empty()))
{
cout<<a.top()<<" ";
a.pop();
}
return 0;
}
#10
栈的作用就是先进先出,你既然不想先进先出,你就不应该用栈。
就像选择大米是用来做饭一样,既然你想吃面条就不应该选择大米。现在你选择了大米,却来问用大米怎么做面条,你不觉得很可笑吗?折腾死你也只能做出个米粉,永远吃不成面条。
就像选择大米是用来做饭一样,既然你想吃面条就不应该选择大米。现在你选择了大米,却来问用大米怎么做面条,你不觉得很可笑吗?折腾死你也只能做出个米粉,永远吃不成面条。
#11
怎么好几个都说栈先进先出。。。那是队列好吗。。。
#12
你说得有些道理,但是我是因为在练习阶段,是想知道除了这个思路以外,有没有别的思路。从大家的发言来看,我的思路好像是好的。
#1
说下思路,先把数据全部抛出来,删除某个,再重新压进去
#2
栈本就是先进先出的数据结构,你想删除中间的某个值,那就必须把栈顶部的值都放出去存储起来,然后再入栈存进来。
如果不借用stack,那就借用vector,入栈的时候用反向迭代器访问vector。
不过还不如用stack。
如果不借用stack,那就借用vector,入栈的时候用反向迭代器访问vector。
不过还不如用stack。
#3
无语!这你还用stack干什么?你的选择可能有问题?你不该用stack。如果非要这么用,自己重载一个。
#4
我记得好像可以用stack 去初始化一个vector 反正都是容器,你从vector删除stack就可以了,但是貌似,你用stack构造vector,然后用vector构造stack,会两次构造函数,这样会导致略慢
#5
#include <iostream>
#include <stack>
using namespace std;
template <class T>
class mystack :public stack<T>
{
public:
void mypop(T num)
{
this->c.erase(c.begin()+1);
}
};
int main()
{
mystack<int> sta;
sta.push(1);
sta.push(2);
sta.mypop(1);
int b = sta.top();
cout << "b = " <<b<< endl;
return 0;
}
代码有点丑陋 意思说明白了。
stack内部实现是STL容器(list或者其他),是保护成员。
继承stack,通过子类的成员函数操作stack内部容器就行。
#include <stack>
using namespace std;
template <class T>
class mystack :public stack<T>
{
public:
void mypop(T num)
{
this->c.erase(c.begin()+1);
}
};
int main()
{
mystack<int> sta;
sta.push(1);
sta.push(2);
sta.mypop(1);
int b = sta.top();
cout << "b = " <<b<< endl;
return 0;
}
代码有点丑陋 意思说明白了。
stack内部实现是STL容器(list或者其他),是保护成员。
继承stack,通过子类的成员函数操作stack内部容器就行。
#6
如果有从中间删除元素的需求,那就不应该选择stack。
#7
原理上讲只能这样做
#8
我这个程序是练习stack的,所以没用vector.
#9
按照这个提示,我试着写了一下,但是感觉自己写得好复杂。
#include <iostream>
#include <stack>
using namespace std;
int main()
{
stack<int>a;
a.push(10);
a.push(6);
a.push(4);
a.push(20);
a.push(15);
stack<int>b;
int count[a.size()-1];
int n = 0;
int num;
for(int i=a.size()-1; i>=0; i--)
{
num = a.top();
if(num != 4)
{
count[n] = num;
n++;
}
a.pop();
}
for(int i=0; i<n; i++)
{
a.push(count[i]);
}
while(!(a.empty()))
{
cout<<a.top()<<" ";
a.pop();
}
return 0;
}
#10
栈的作用就是先进先出,你既然不想先进先出,你就不应该用栈。
就像选择大米是用来做饭一样,既然你想吃面条就不应该选择大米。现在你选择了大米,却来问用大米怎么做面条,你不觉得很可笑吗?折腾死你也只能做出个米粉,永远吃不成面条。
就像选择大米是用来做饭一样,既然你想吃面条就不应该选择大米。现在你选择了大米,却来问用大米怎么做面条,你不觉得很可笑吗?折腾死你也只能做出个米粉,永远吃不成面条。
#11
怎么好几个都说栈先进先出。。。那是队列好吗。。。
#12
你说得有些道理,但是我是因为在练习阶段,是想知道除了这个思路以外,有没有别的思路。从大家的发言来看,我的思路好像是好的。