C++中的npos,size_t,size_type


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM