迭代器的使用--关于迭代器的失效
这是程序员面试宝典上的一个小题。
要点是:使用erase之后迭代器失效。
实际上失效是指原来的迭代器,在删除一个元素之后,自动指向了下一个元素。
测试代码如下,删除容器中的值为6的所有元素。
A 错误的代码为:
- #include <iostream>
- #include <vector>
- usingnamespace std;
- void print(vector<int>);
- int main()
- {
- vector<int> array;
- array.push_back(1);
- array.push_back(6);
- array.push_back(6);
- array.push_back(3);
- vector<int> :: iterator itor;
- for (itor = array.begin(); itor != array.end(); itor++)
- {
- if (6 == *itor)
- {
- array.erase(itor);
- }
- }
- cout << "vector size is: " << array.size() << endl;
- for (itor = array.begin(); itor != array.end(); itor++)
- {
- cout << *itor << " " << endl;
- }
- return 0;
- }
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>);
int main()
{
vector<int> array;
array.push_back(1);
array.push_back(6);
array.push_back(6);
array.push_back(3);
vector<int> :: iterator itor;
for (itor = array.begin(); itor != array.end(); itor++)
{
if (6 == *itor)
{
array.erase(itor);
}
}
cout << "vector size is: " << array.size() << endl;
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " " << endl;
}
return 0;
}
输出的结果是:1, 6, 3.第二个6没有删除。
B 修改后的代码如下:
- #include <iostream>
- #include <vector>
- usingnamespace std;
- void print(vector<int>);
- int main()
- {
- vector<int> array;
- array.push_back(1);
- array.push_back(6);
- array.push_back(6);
- array.push_back(3);
- vector<int> :: iterator itor;
- for (itor = array.begin(); itor != array.end();)
- {
- if (6 == *itor)
- {
- array.erase(itor);
- }
- else
- itor++;
- }
- cout << "vector size is: " << array.size() << endl;
- for (itor = array.begin(); itor != array.end(); itor++)
- {
- cout << *itor << " " << endl;
- }
- return 0;
- }
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>);
int main()
{
vector<int> array;
array.push_back(1);
array.push_back(6);
array.push_back(6);
array.push_back(3);
vector<int> :: iterator itor;
for (itor = array.begin(); itor != array.end();)
{
if (6 == *itor)
{
array.erase(itor);
}
else
itor++;
}
cout << "vector size is: " << array.size() << endl;
for (itor = array.begin(); itor != array.end(); itor++)
{
cout << *itor << " " << endl;
}
return 0;
}
结果是 1 ,3
可见,使用了erase之后,迭代器自动指向了下一个元素。
聚拓互联(http://www.ejutuo.com).Net平台至强虚拟主机供应商,是领先的互联网基础应用服务提供商,主要面向全球客户提供域名注册、国内、香港/美国虚拟主机、企业邮箱、智能建站、虚拟服务器(VPS)、服务器租用、服务器托管等丰富的网络产品服务。
聚拓互联的快速发展与其企业文化密不可分,易网人秉持“团结互助、敬业负责、恪守信誉、积极进取、勇于创新”的企业文化,汇聚了行业内的大量专业人士,拥有多位国内顶尖的linux/freeBSD/unix经验的系统工程师、微软认证工程师和网络安全技术人才。核心团队均为该行业从业多年的专业人士,拥有丰富行业经验和较高威望,并不断改革创新,以满足客户多元化需求为己任,不断进取。 同时,易网坚守 “专业品质、服务为本、诚信经营、恪守信誉”的核心价值观,为客户提供多样、安全、稳定、放心的产品。
浙公网安备 33010602011771号