zoukankan      html  css  js  c++  java
  • C++基本数据类型


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


       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=i
    const 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中读取字符串赋给s
    getline(is,s)        从is中读取一行赋给s。返回is
    s.empty()
    s.size()
    s[n]
    s1+s2
    s1=s2
    s1==s2
    s1!=s2</span></span>

    4   标准库类型vector对象

         vector模版时定义和初始化向量的方法。
    vector<T>  v1          v1是一个空vector,它的元素类型是T,运行默认初始化
    vector<T>  v2(v1)
    vector<T>  v2=v1
    vector<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的成员 

         能够看出迭代器事实上和指针非常类似。 
          
            
  • 相关阅读:
    unity3d 几种镜头畸变
    深度学习主机环境配置: Ubuntu16.04 + GeForce GTX 1070 + CUDA8.0 + cuDNN5.1 + TensorFlow
    Autofac 中间件使用
    NetCore SignalR 重连逻辑实现
    CentOS 7 安装 MySql8.0
    CentOS 7 安装 Nginx
    CentOS 7 安装 Docker
    Nginx 配置站点
    VUE AXIOS 跨域问题
    CentOS 7 安装 MySql 8
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6912363.html
Copyright © 2011-2022 走看看