《C++ Primer 第五版》(第3.5-3.6节) ——C++中的内置数组类型,string对象和C风格字符串

1.C++中的内置数组类型

            C++中的数组是内置数据类型,但不是基础数据类型而是构造数据类型,是有限个相同数据、占据着连续物理存储空间的有序集合。而内置数据类型定义的下标运算符可以处理负值运算(只要在数组范围之内),这和vector及string的下标运算符要求是无符号整数不一样。比如:

                                                                             int a[10]={ 0 };

                                                                             int *p = &a[2];

                                                                             int j=p[1];           // j=a[3];

                                                                             int k=p[-2];        //  k=a[1];

           C++11引入begin()和end()(定义在头文件iterator中)两个非成员函数,使用这两个函数可以获得数组的头指针和尾后指针。一般情况下,碰到复杂的数组声明时,采用的原则是从数组名开始,从内到外,从右到左依次结合分析。比如:

           int *ptr[10];             //声明一个指针数组,数组里面含有10个整形指针;

           int  (*ptr)[10];         //声明一个数组指针,指针指向一个含有10个整形元素的首地址;

           int  (&ptr)[10];        //声明一个数组引用,引用绑定的是一个含有10个整形元素的首地址;

          C++规定,不能使用数组或者vector去初始化数组,但是可以允许使用数组的首指针和尾后指针去初始化vector,比如:

                                         int a[10]={0};

                                         vector<int> vec(begin(a),end(a));

          对于多维数组遍历或者其他对象如string和vector对象,使用范围for语句能够起到很好的效果。但是由于多维数组中只有最内层的是表示数据类型,其他都是表示指针类型,因此使用范围for语句遍历或修改多维数组的数据时,将除最内层循环变量的其他所有循环变量都设置为引用类型。比如:

                                                       int a[3][4][5]={0}; unsigned int cnt = 0 ;

                                                       for(auto &i : a)

                                                        for(auto &j : i)

                                                         for(auto k : j)

                                                            k=cnt++:

                                                         

2.string对象和C风格字符串

        C++为了兼容C中的字符串,将C中处理字符串的函数文件string.h变为cstring文件,其中string.h中常用的处理字符串的函数有:

                          strlen(p)                  //获取字符串的长度,末尾\0不计算在内;

                          strcmp(p1,p2);        //比较两个字符串的大小,p1=p2,返回0;p1>p2,返回正值;p1<p2:返回负值;

                          strcat(p1,p2);          //将字符串p1和字符串p2拼接,返回p1;(必须保证p1的内存能够完成这个操作)

                          strcpy(p1,p2):         //将字符串p2拷贝给p1,返回p1;(必须保证p1的内存能够完成这个操作)

        string中为了兼容C字符串,允许使用字符串字面值来初始化或赋值给string对象,同时允许在string对象的加法运算中一个对象为字符串字面值。除此之外,string中提供一个c_str()的成员函数来得到string对象对应的C风格字符串。

        

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值