怎么样销售关于网站建设,网站空间服务商,甜橙直播,电子商务网站建设实践课题背景迭代器介绍
迭代器#xff08;iterator#xff09;#xff1a;容器类型内置的“指针”
- 使用迭代器可以访问某个元素#xff0c;迭代器也能从一个元素移动到另一个元素。
- 有迭代器的类型都拥有 begin 和 end 成员- begin#xff1a;返回指向第一个元素#xff08;或字…迭代器介绍
迭代器iterator容器类型内置的“指针”
- 使用迭代器可以访问某个元素迭代器也能从一个元素移动到另一个元素。
- 有迭代器的类型都拥有 begin 和 end 成员- begin返回指向第一个元素或字符的迭代器- end尾后迭代器即尾元素的下一个位置一个本不存在的元素 使用迭代器
auto b v.begin(),e v.end(); // b和e的类型相同如果容器为空则begin和end返回的是同一个迭代器都是尾后迭代器 举个例子下面利用迭代器实现
string s some string;
if(s.begin() ! s.end()) { //确保s非空auto it s.begin(); //it表示s的第一个字符*it toupper(*it); //将当前字符改成大写形式
} //Some string使用迭代器遍历容器
for(auto it s.begin(); it ! s.end() !isspace(*it); it) {*it toupper(*it);
} // SOME string迭代器类型
vectorint::iterator it; //it能读写元素
vectorint::const_iterator it2;//it2只能读元素不可以写元素如果vector或者string对象是一个常量只能使用const_iterator如果不是常量则既能使用iterator也能使用const_iterator
正序迭代
begin();end() //iterator
cbegin();cend() //const_iterator逆序迭代
rbegin();rend() //reverse_iteratorint main() {vectorint vec{0,1,2,3,4,5,6,7,8,9};vectorint::reverse_iterator it;for (it vec.rbegin(); // 迭代器指向最后一个元素it ! vec.rend(); // rend() 指向第一个元素的前一个it) // 操作访问前一个元素cout *it ; // prints 9,8,7,...0return 0;
}迭代器解引用
vectorstring vec;
auto it vec.begin();
(*it).empty() //检查vector中的元素是否为空只需检查it所指字符串是否为空箭头运算符(-)
it-mem (*it).mem 表达的意思相同WARNING
任何一种可能改变vector对象容量的操作比如push_back都会使该vector对象的迭代器失效。 但凡是使用了迭代器的循环体都不要向迭代器所属的容器添加元素。
迭代器运算 或者是两个迭代器相减就可以得到中间隔了多少个元素。
使用迭代器运算的一个经典算法是二分搜索
vectorint text {1,2,3,4,5};auto sought 2;auto beg text.begin(), end text.end();auto mid beg (end - beg) / 2; //初始状态的中间点while(mid ! end *mid ! sought) {if(sought *mid) end mid;else beg mid 1;mid beg (end - beg) / 2; //新的中间点}循环过程终止时mid或者等于end或者指向要找的元素。如果说mid等于end说说明text中没有我们要找的元素。