关于医院要求建设网站的请示,自助小站,有一个网站专门做促销小游戏,网站建设栏目添加迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法#xff0c;并且定义了容器中对象的范围。一、vector容器的iterator类型vector容器的迭代器属于随机访问迭代器#xff0c;一次可以移动多个位置。vectorint::iterator …迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。它提供对一个容器中的对象的访问方法并且定义了容器中对象的范围。一、vector容器的iterator类型vector容器的迭代器属于随机访问迭代器一次可以移动多个位置。vectorint::iterator iter//变量名为iter成员函数功能begin()返回指向容器中第一个元素的正向迭代器若是const类型容器在该函数返回的是常量正向迭代器。end()返回指向容器最后一个元素之后一个位置的正向迭代器如果是const类型容器在该函数返回的是常量正向迭代器。此函数通常和begin搭配使用。rbegin()返回指向最后一个元素的反向迭代器如果是const类型在该函数返回的是常量反向迭代器。rend返回指向容器第一个元素之后一个位置的反向迭代器如果是const类型容器在该函数返回的是常量正向迭代器。此函数通常和rbegin搭配使用。cbegin()和begin()功能类似其返回的迭代器类型为常量正向迭代器不能修改元素。cend和end()功能类似其返回的迭代器类型为常量正向迭代器不能修改元素。crbegin()和rbegin()功能类似其返回的迭代器类型为常量反向迭代器不能修改元素。。crend和rend()功能类似其返回的迭代器类型为常量反向迭代器不能修改元素#includeiostream
#includevector
using namespace std;
int main()
{int arr[]{0,1,2,3,4};vectorint vecInt;vecInt.assign(arr,arr5);vectorint::iterator t;vectorint::reverse_iterator t1;
//1、 tvecInt.begin();for(;tvecInt.end();t){cout*t ;} coutendl;
// 输出01234 //2、 tvecInt.end();t--; for(;tvecInt.begin();t--){cout*t ;} coutendl;
// 输出43210 //3、t1vecInt.rbegin();for(;t1vecInt.rend();t1){cout*t1 ;} coutendl;
// 输出43210 //4、 t1vecInt.rend();t1--;for(;t1vecInt.rbegin();t1--){cout*t1 ;} coutendl;
// 输出0, 1, 2, 3, 4return 0;
} 二、迭代器失效插入元素后导致失效#includeiostream
#includevector
using namespace std;
int main()
{vectorint vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(2);vecInt1.push_back(3);vecInt1.push_back(4);vectorint::iterator t;tvecInt1.begin()2;vecInt1.insert(t,5);cout*tendl;
// 本来应该指向2插入后指向5 return 0;
}序列使容器删除元素失效错误示范#includeiostream
#includevector
using namespace std;
int main()
{vectorint vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(4);vectorint::iterator t;tvecInt1.begin();for(;tvecInt1.end();t){if(*t1){vecInt1.erase(t);} } tvecInt1.begin();for(;tvecInt1.end();t){cout*t ;} coutendl;// 输出为014没有删除干净1 return 0;
}由于删除后下一个元素会移到被删除的元素如果此时指针仍自加1导致该元素被忽略解决办法#includeiostream
#includevector
using namespace std;
int main()
{vectorint vecInt1;vecInt1.push_back(0);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(1);vecInt1.push_back(4);vectorint::iterator t;tvecInt1.begin();for(;tvecInt1.end();){if(*t1){vecInt1.erase(t);} else{t;} } tvecInt1.begin();for(;tvecInt1.end();t){cout*t ;} coutendl;// 输出为04return 0;
}