C++基本数据类型

来源:互联网 发布:mysql字段名大小写 编辑:程序博客网 时间:2024/06/05 08:27


    数据类型是程序的基础:它烤酥我们数据的意义以及我们能在这些数据上执行的操作。


   C++语言支持广泛的数据类型。它定义了集几种基本的内置类型(如字符、整型、浮点型等),同时也为程序猿提供了自定义数据类型的机制。另外,C++标准库定义了一些更加复杂的数据类型(如可变长字符串和向量等)。


    这里我们主要讲下C++中不同于C语言的数据类型。


1  引用

    引用即别名。
    引用就是对象的另一个名字,将声明符写成&d的形式定义一个引用类型。
    定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。这点要注意。
    所以引用必须要初始化(且初始化对象不能为字面值或某个表达式的计算结果),一旦初始化完成,引用将和它的初始值对象一直绑定在一起,无法令引用重新绑定到另一个对象。

 int ival=1024;
int &reVal=ival;int &reVal//错误,引用必须初始化

2  const限定符

    我们希望定义一个变量,它的值不能被改变,那就可以使用const限定符。
    因为const对象一旦创建后其值就不能被改变,所以const对象必须初始化。

const int val=512;const int i=get.size();const int ci=i;


    

    2.1 const对象仅在文件内有效

    如果程序包含了很多个文件,每个用到了const对象的文件都必须能访问搭配它的初始值,要做到这一点,就必须在每个用到变量的文件中去定义它,而为了避免同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有效。当多个文件出现了同名的const变量时,其值等于它在不同文件中定义的独立变量值。

   2.2  const的引用

    把引用绑定到const变量上,对常量的引用。
const int i=1024;const int &val=i;

    与普通变量不同的是,常量引用不能被用来改变它所绑定的对象的值。因为它们都是不可变的。
<span style="font-size:18px;">一般来说引用类型必须与它所绑定的对象的类型一致,但是在初始化常量引用时,允许用任意表达式作为初始值!可以是字面值、非常量的对象、甚至一个表达式!大家一定很惊讶对不对,这是为什么呢?</span>

    
int i=42;const int &r1=iconst int &r2=42;const int &r3=r1*2;
   
    要明白为什么,我们就要知道当一个常量引用绑定到另一种类型上时,编译器都干了些什么。
    
double dval=3.14;const int &ri=dval;--------------------------const int temp=dval;//让双精度浮点数生成一个临时的整型变量const int &ri=temp;//让ri绑定这个临时量

    为了确保ri绑定一个整数,编译器讲上面的代码变成了下面的形式。
    ri绑定了一个临时量对象。

3  标准库类型string

      标准库类型string表示可变长字符序列
    使用string类型必须包含string头文件。
    定义和初始化:
 
<span style="font-size:18px;"><span style="font-size:18px;">string s1;string s2(s1);string s2=s1;string s3("value");string s3="value";string s4(n,'c');//s4的值初始化为n个字符c组成的串</span></span>
     
   string对象上的操作:
<span style="font-size:18px;"><span style="font-size:18px;">os<<s                将写到输出流中,返回os is>>s                从is中读取字符串赋给sgetline(is,s)        从is中读取一行赋给s,返回iss.empty()s.size()s[n]s1+s2s1=s2s1==s2s1!=s2</span></span>

4   标准库类型vector对象

     vector模版时定义和初始化向量的方法。
vector<T>  v1          v1是一个空vector,它的元素类型是T,执行默认初始化vector<T>  v2(v1)vector<T>  v2=v1vector<T>  v3(n,val)vector<T>  v5{a,b,c...}

     向vector中添加元素:
     有时候我们创建一个vector对象并清楚实际需要的元素个数,元素的值也无法事先确定。有时候在创建vector 对象时初始化工作过于繁琐。

      我们的处理方法是先创建一个空的vector对象,然后在运行时利用vector的成员函数push_back向其中添加元素。
      push_back将新元素压入(push)vector的尾端(back)。

    
vector<int> v1;for(int i=0;i!=100;1++)   vector.push_back(i);

         其他vector操作多类似于string。这里就不再赘述。
      这里要注意的是vector中不能以下标形式添加元素。

5   迭代器iterator

     对于string和vector可以用下标来访问元素。那么更通用的一种机制是使用迭代器。
     迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员。如begin和end的成员,begin成员负责返回指向第一个元素的迭代器。
     
auto b=v.begin(),e=v.end();

     end成员返回指向容器“尾元素的下一位置”的迭代器。
     迭代器运算符:
*iter                 返回迭代器iter所指元素的引用iter->mem        解引用iter并获取该元素名为哦mem的成员 

     可以看出迭代器其实和指针很类似。 
      
        
0 0