【迭代器学习】

迭代器在Vector中的使用

在C++中可以使用下标运算符来访问string对象的字符和vector的元素,还有另外一种更通用的的机制也可以实现同样的目的,这就是迭代器

迭代器指针不同的是不使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。
例如这些类型都拥有名为 beginend 的成员,其中 begin 成员负责返回指向第一个元素, end 负责返回指向最后一个元素。

//初始化定义
	vector<int> vi{ 1,2,3 };
	auto it1 = vi.begin();
	auto it2 = vi.end();
// 如果容器为空,迭代器返回的都是同一个,尾迭代器

标准容器的迭代运算符

  • *iter 迭代器所指元素的引用
  • iterm->men 解引用iter并获取元素的名为men的成员,等价于(*iter).mem
  • ++iter 令iter指向下一个元素
  • --iter 令iter指向上一个元素
  • iter1 == iter2 判断两个迭代器相等
  • iter1 != iter2 反之或者不相等

迭代器的类型

就像不知道 string 和 vector 的 size_type 成员到底是什么类型一样,一般来说我们也不知道(其实我们
也无须知道)迭代器的精确类型。而实际上,那些拥有什么迭代器的标准库类型使用 iterator 和 
const_iterator 来表示迭代器的类型
	vector<int>::iterator it;  //it 只能读写vector中的元素
	string::iterator it2;		//it2 只能读写string对象中的字符串
	vector<int>::const_iterator it3;	//it3只能读元素。不能写元素
	string::const_iterator it4;			//it3只能读string对象中的字符,不能写字符

迭代器运算

迭代器的递增运算令每次移动一个元素,所有的标准库都有支持递增运算的迭代器。类似的,也能==和!=对任意标准库类型的两个有效迭代器进行比较。

  • iter + n 迭代器加上一个整数值任是一个迭代器,迭代器指示的新位置和原来的位置相比移动了若干个新的元素。
  • iter - n 迭代器减去一个整数值任是一个迭代器,迭代器指示的新位置和原来的位置相比移动了若干个新的元素。
  • iter1 += n 迭代器加法的复合语句 ,将iter1 加 n 的结果赋给 iter1。
  • iter2 += n 迭代器减法的复合语句 ,将iter2 加 n 的结果赋给 iter2。
  • iter1 - iter2 两个迭代器的距离。
  • > , < , <= , >= 迭代器的关系运算符号。

迭代器经典使用 二分搜索法

//二分搜索法 示例
	vector<int> test{ 1,2,3,4,5,6,7,8,9,10};
	int sought = 8;
	auto beg = test.begin(), end = test.end();
	auto mid = test.begin() + (end - beg) / 2;
	while (*mid != sought && mid != end)
	{
		if (*mid > sought)
		{
			end = mid;
		}
		else
		{
			beg = mid ;
		}
		mid = beg + (end - mid) / 2;
	}

	cout << *mid << endl;
	system("pause"); 

【学习记录231121】

你可能感兴趣的:(学习,开发语言,c++)