为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_tsize_type而不是int, unsigned

1. size_t是全局定义的类型;size_type是STL类中定义的类型属性,用以保存任意stringvector类对象的长度

2. string::size_type 制类型一般就是unsigned int, 但是不同机器环境长度可能不同 win32 和win64上长度差别;size_type一般也是unsigned int
3. 使用的时候可以参考:
   string::size_type  a =123;
   vector<int>size_type b=234;
   size_t b=456;
4. size_t 使用的时候头文件需要 <cstddef> ;size_type 使用的时候需要<string>或者<vector>
5.  sizeof(string::size_type) 
     sizeof(vector<bool>::size_type) 
     sizeof(vector<char>::size_type)  
     sizeof(size_t) 
     上述长度均相等,长度为win32:4 win64:8
6. 二者联系:在用下标访问元素时,vector使用vector::size_type作为下标类型,而数组下标的正确类型则是size_t

size_type使用时应注意,由于size_type未unsigned int 所以在循环中,当size_type类型的变量在自减到0后不能再减,否则将又会变为一个正数而不是为-1;

例如下例:

int main()
{
vector<int> array1;
array1.push_back( );
array1.push_back( );
array1.push_back( );
for( vector<int>::size_type i=array1.size()-; i>=; --i )
{
cout << array1[i] << endl;
}
return ;
}

程序会报错,下标越界;而改成int型或者改为如下例以后就没问题了,这是因为size_type是一个unsigned int类型,每当他减到“-1”时,就会转化成了一个正数。

int main()
{
vector<int> array1;
array1.push_back( );
array1.push_back( );
array1.push_back( );
for( vector<int>::size_type i=array1.size(); i>; --i )
{
cout << array1[i-] << endl;
}
return ;
}

参考:

STL库中size_type的问题      http://blog.csdn.net/thefutureisour/article/details/8028707

【c++】size_t 和 size_type的区别    http://www.cnblogs.com/kaituorensheng/p/3239446.html

size和STL中的size_type的更多相关文章

  1. C++ STL中vector(向量容器)使用简单介绍

    原文:http://www.seacha.com/article.php/knowledge/cbase/2013/0903/2205.html C++ vector(向量容器)是一个线性顺序结构.相 ...

  2. STL中的单向队列queue

    转载自:http://blog.csdn.net/morewindows/article/details/6950917 stl中的queue指单向队列,使用时,包含头文件<queue>. ...

  3. STL中的stack(堆栈)

    转载:http://blog.csdn.net/morewindows/article/details/6950881 栈(statck)这种数据结构在计算机中是相当出名的.栈中的数据是先进后出的(F ...

  4. C++STL中map容器的说明和使用技巧(杂谈)

    1.map简介 map是一类关联式容器.它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响.对于迭代器来说,可以修改实值,而不能修改key. 2.map的功能 自 ...

  5. 浅谈C++ STL中的优先队列(priority_queue)

    从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维的一致性导致的. 今天讲一讲优先队列(priority_queue),实际 ...

  6. C++ STL中哈希表Map 与 hash_map 介绍

    0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华 ...

  7. C++中的STL中map用法详解

    Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  8. STL中的内存与效率

    STL中的内存与效率 1. 使用reserve()函数提前设定容量大小,避免多次容量扩充操作导致效率低下.  关于STL容器,最令人称赞的特性之一就是是只要不超过它们的最大大小,它们就可以自动增长到足 ...

  9. STL中的algorithm

    STL中的algorithm #include<algorithm>中的泛函算法,需要添加头文件. 搜索算法:find() .search() .count() .find_if() .s ...

随机推荐

  1. pip命令安装

    sudo su #切换root用户sudo apt-get install python-pip #安装pip sudo apt-get remove python-pip  #卸载pippip -- ...

  2. 手搓一个兔子问题(分享一个C语言问题,持续更新...)

    大家好,我是小七夜,今天就不分享C语言的基础知识了,分享一个比较好玩的C语言经典例题:兔子问题 题目是这样的:说有一个穷苦人这天捉到了一只公兔子,为了能繁衍后代他又买了一只母兔子,后来兔子开始生小兔子 ...

  3. 磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题

    原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...

  4. Oracle入门第五天(下)——数据库其他对象

    一.概述 其他数据库对象 主要掌握的为序列 二.序列 1.什么是序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效 ...

  5. flex stacked column graph

    Flex: Stacked column chart – programmatically in actionscript By bishopondevelopment I was looking f ...

  6. 20155206 《JAVA程序设计》实验二(JAVA面向对象程序设计)实验报告

    20155206 <JAVA程序设计>实验二(JAVA面向对象程序设计)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S ...

  7. 20155207王雪纯 2006-2007-2 《Java程序设计》第二周学习总结

    20155207王雪纯 2006-2007-2 <Java程序设计>第二周学习总结 教材学习内容总结 整数类型:short(占2字节).int()占4字节.long(占8字节) " ...

  8. 20155239《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    实验内容及步骤 使用JDK编译.运行简单的java程序 2.使用IDEA编辑.编译.运行.调试Java程序 (一)使用JDK编译.运行简单的java程序 命令行下的程序开发 先建立一个文件夹命名为Co ...

  9. C语言复习20170716

    C语言复习20170716 C数据类型 图片来自:C语言基本数据类型简介 C语言程序处理的数据有常量和变量两种形式. 常量是在程序中不能改变其值的量.例如:整型常量.实型常量.字符常量.字符串常量和枚 ...

  10. 20155331 实验四 Android开发基础

    20155331丹增旦达实验四报告 实验四 Android程序设计-1 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java ...