string类提供了6种查找函数,每种函数以不同形式find命名,这些操作全都返回string::size_type类型的值,以下标形式标记查找匹配所发生的位置,或返回一个名为string::npos的特殊值,说明查找没有匹配,string类将npos定义为保证大于任何有效下标的值
简言之:当值与npos相等时,说明没有找到,两者比较不等时,说明找到了。
npos表示大于任何有效下标值,可以用string::npos作为string的成员函数的一个长度参数,表示直到字符串结束。
这里的string::npos就是一个长度参数,表示直到字符串的结束,配合idx+1表示,string的剩余部分。
size_t和size_type:
总结:
size_t类型的命名空间是全局的命名空间,size_type是类中定义的类型属性,用以保存任意string和vecotr类对象的长度,size_type是容器概念,没有容器不能使用,size_type是一个unsigned int类型。容器中不用int来表示sizeof的原因是,int在不同的机器上长度不一样,16位的机器int值太小,不够用来表示。string类中定义有string::size_type类型,vector类中定义有vector<int>::size_type类型,后两者的定义不重复,只是命名空间不同而已。
size_t:定义在cstddef头文件中,与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小
size_type:被定义为unsigned类型,与机器无关(即在不同的机器上,长度可以是不同的,并非固定长度),同样能存储任意长度的对象大小
注意:size_type本质上来说是个整型数,sizeof的结果类型是size_t
千万注意:不要把size_t类型的数和int类型的进行大小比较,机器会把int的转化成无符号再比较,与原本想要实现的功能的本意不同了。
引自https://zhidao.baidu.com/question/485415372.html
https://blog.csdn.net/lzx_bupt/article/details/6558566
https://blog.csdn.net/jiejinquanil/article/details/51789682
https://blog.csdn.net/wallwind/article/details/6583714