当我们使用insert(),和erase()函数时总会遇到一些问题,搞清楚其中的原理就是这篇文章的内容
erase()
int main()
{
std::vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
std::vector<int>::iterator itor;
for (itor = array.begin(); itor != array.end(); itor++)
{
if (*itor == 300)
{
itor = array.erase(itor);
}
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}
这段代码的结果是什么?
为什么会产生这样的结果呢?
当itor指向第一个300时,会删除所指向的对象,返回删除对象的下一个对象的指针
即:
itor再++
就会出现上述的答案
我们如何修改达到我们想要的效果呢?
int main()
{
std::vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
std::vector<int>::iterator itor =array.begin();
while (itor != array.end())
{
if (*itor == 300)
{
itor = array.erase(itor);
}
else
{
++itor;
}
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}
insert()
int main()
{
std::vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
std::vector<int>::iterator itor =array.begin();
while (itor != array.end())
{
if (*itor == 300)
{
itor = array.insert(itor,200);
}
++itor;
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}
这段代码的结果是什么?
死循环
为什么会有这样的结果呢?
当遇到第一个300时,我们会插入200时,itor会指向他
因此上述代码会一直在200,300之间一直插入
所以我们只需加入itor插入之后先向后走就能解决
int main()
{
std::vector<int>array;
array.push_back(100);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(300);
array.push_back(500);
std::vector<int>::iterator itor =array.begin();
while (itor != array.end())
{
if (*itor == 300)
{
itor = array.insert(itor,200);
++itor;
}
++itor;
}
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " ";
}
return 0;
}