栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer笔记( 3.4.1)—— 3.4.1使用迭代器

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer笔记( 3.4.1)—— 3.4.1使用迭代器

C++ Primer笔记( 3.4.1)—— 3.4.1使用迭代器







#include 
#include 
#include 

using std::string;
using std::vector;

int main()
{
	

	//和指针不一样的是,获取迭代器不是只用取地址符,有迭代器的类型同时拥有返回迭代器的成员。
	//比如,这些类型都拥有名为begin和end的成员,其中begin成员负责返回指向第一个元素的迭代器。
	
	vector v = { 0,1,2,3,4,5,6 };
	auto b = v.begin(), e = v.end();  //b和e类型相同

	//end成员则负责返回指向容器“尾元素的下一个位置”的迭代器,也就是说该迭代器指示的是容器的一个本不存在的“尾后”元素
	//这样的迭代器没有什么实际含义,仅是一个标记而已,表示我们已经处理完了容器中的所有元素。
	//end成员返回的迭代器常被称作尾后迭代器

	//如果容器为空,则begin和end返回的是同一个迭代器

	


	

	
	
	
	
	
	
	
	
	
	

	string s("some string");
	if (s.begin() != s.end())
	{
		auto it = s.begin();  //it表示s的第一个字符
		*it = toupper(*it);   //将当前字符改成大写形式
	}
	std::cout << "s为:" << s << std::endl;

	


	

	//迭代器使用递增(++)运算符来从一个元素移动到下一个元素。
	//Note:因为end返回的迭代器并不实际指示某个元素,所以不能对其进行递增或解引用的操作
	string s1("some string");
	for (auto it = s1.begin(); it != s1.end() && !isspace(*it); ++it)
		*it = toupper(*it);

	std::cout << "s1为:" << s1 << std::endl;
	std::cout << std::endl;

	


	
	//就像不知道string和vector的size_type成员到底是什么类型一样,一般来说我们也不知道迭代器的精确类型。
	//而实际上,那些拥有迭代器的标准库类型使用iterator和const_iterator来表达迭代器的类型

	vector::iterator it;  //it能读写vector的元素
	string::iterator it2;      //it2能读写string对象中的字符

	vector::const_iterator it3;  //it3只能读元素,不能写元素
	string::const_iterator it4;       //it4只能读字符,不能写字符

	


	
	//begin和end返回的具体类型由对象是否是常量决定。如果对象是常量,begin和end返回const_iterator;
	//如果对象不是常量,返回itreator。

	vector iv;
	const vector cv;
	auto itv = iv.begin();    //itv1的类型是vector::iterator
	auto itv2 = cv.begin();   //itv2的类型是vector::const_iterator


	//cbegin和cend用于专门得到const_iterator类型
	auto cit = iv.cbegin();  
	


	
	//解引用迭代器可获得迭代器所指的对象,如果该对象的类型恰好是类,就有可能希望进一步访问它的成员。
	//例如,对于一个由字符串组成的vector对象来说,要想检查其元素是否为空,令it是该vector对象的迭代器,
	//只需检查it所指字符串是否为空就可以
	vector v2 = {"aaaaaa", "bbbbbbb"};
	auto vt2 = v2.begin();
	if ((*vt2).empty())  std::cout << "元素为空" << std::endl;
	else  std::cout << "元素不为空" << std::endl;

	//为了简化,C++定义了箭头运算符(->)。
	//也就是说it->mem和(*it)->mem表达意思相同

	
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966111.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号