力扣刷题栈1249
STL中的erase:(野指针问题)
erase()函数用于在顺序型容器中删除容器的一个元素
erase函数的返回值是一个指向被删除元素的下一个元素的迭代器
与int固定四个字节不同有所不同,size_t的取值range是目标平台下最大可能的数组尺寸,一些平台下size_t的范围小于int的正数范围,又或者大于unsigned int. 使用Int既有可能浪费,又有可能范围不够大。
class Solution {
public:
string minRemoveToMakeValid(string s) {
stack<unsigned> stackA;
for(size_t i = 0;i<s.size();i++)
{
if(s[i]=='(')
{
stackA.push(i);
}
else if(s[i]==')')
{
if(!stackA.empty()&&s[stackA.top()]=='(')
{
stackA.pop();
}
else
{
stackA.push(i);//记录多余的后面直接删掉
}
}
}
while(!stackA.empty())
{
s.erase(stackA.top(),1);
stackA.pop();
}
return s;
}
///
for(list<int>::iterator iter = ilst.begin();
iter != ilst.end();iter++
){
if((*iter) %2 == 1){
// int tmp = *iter;
iter = ilst.erase(iter);
--iter;//这里--就会出现野指针(很简单感觉不会犯这种错。。。。。。。。。
// continue;
}
// iter++;
}
///正确答案
for(vector<int>::iterator iter = ivec.begin();
iter != ivec.end(); //iter++
){
if((*iter) %2 == 0){
// int tmp = *iter;
iter = ivec.erase(iter);
// --iter;
continue;
}
iter++;
}
};
更多推荐
力扣刷题栈1249
发布评论