C++编程基础知识二

2025-11-11 16:13:58

1、string:

string表示可变长的字符序列;

vector存放的是某种给定类型对象的可变长序列;

数组的实现与硬件密切相关;

头文件不应包含using声明;

#include <string>

使用getline读取一整行;

string::size_type标准库类型:无符号类型的值,能足够存放任何string对象的大学;

string对象比较:

当两个string对象的长度不同,且较短string对象的每个字符都与较长string对象对应位置字符相同,则较短string对象小于较长string对象;

当两个string对象在某些对应位置不一致时,则string对象比较结构就是string对象中第一对相异字符比较的结果;

两个string对象相加:其内容是把左侧的运算对象和右侧的运算对象串接而成新的string对象;

C++编程基础知识二

2、vector:

容器;

#include <vector>

vector类模板实例化:即在模板名字后面跟一对尖括号,括号内填信息;

不存在包含引用的vector;

一般来说,先创建一个空vector对象;

push_back:把一个值当成vector对象的尾元素压到vector对象的尾端;

C++编程基础知识二

3、迭代器:迭代器用于元素对象的访问;

①迭代器成员begin和end成员:

begin负责返回指向第一个元素的迭代器;

end成员负责返回指向尾元素的下一位置-尾后元素;

【注】:如果容器为空,则begin和end返回的是同一迭代器;

②迭代器运算:

由解引用迭代器来获取其所指示的元素;

迭代器使用++运算符实现从一个元素移到下一个元素;

【注】:end尾后迭代器不能对其进行解引用或递增操作;

③迭代器类型:iterator和const_iterator;

begin和end返回的具体类型由对象是否是常量决定:如果是常量,则返回cons_iterator;

如果不是常量,则返回iterator;

④结合解引用和成员访问操作:

解引用迭代器能获取迭代器所指的对象;

如果该对象的类型是类,则可进一步访问其成员;(*it).empty();

箭头运算符:把解引用和成员访问操作结合在一起;it->mem == (*it).mem;

⑤迭代器示例-二分搜索:

//text必须是有序的

//beg和end表示我们搜索的范围

auto beg = text.begin(), end = text.end();

auto mid =text.begin() + (end-beg)/2;//初始状态下的中间点

//当还有元素尚未检查并且我们还没找到sought时执行循环

while(mid != end && *mid != sought){

  if(sought < *mid)  //找前半部分

end = mid;

  else

beg = mid + 1;

  mid = beg + (end - beg)/2;//新的中间点

}

C++编程基础知识二

4、数组:存放类型相同对象的容器,但数组大小固定;

①字符数组初始化:用字符串字面值初始化字符数组时,注意字符串结尾处还有一个空字符‘\0’也会拷贝到字符数组中去;char a3[]=”c++”;//维度为4;

②访问数组元素:

数组的索引从0开始;

size_t类型:是一种机器相关的无符号类型,其足够大以便能表示内存中任意对象的大小;

③指针和数组:

对数组的元素使用取地址符得到指向改元素的指针;string *p=&nums[0];

在用到数组名字时,编译器自动将其替换为一个指向数组首元素的指针;

string *p2=nums;//等价于p2=&nums[0];

指针也是迭代器,允许使用递增运算符将指向数组元素的指针向前移动下一个位置上;

获取指向数组第一个元素的指针和指向数组尾元素的下一位置指针即可遍历数组中的元素;

begin()返回指向ia的首先素指针;

end()返回指向ia尾元素下一位置指针;

对数组执行下标运算其实是对指向数组元素的指针执行下标运算:

int i=ia[2]; 等价于int *p=ia; i=*(p+2);

只要指针指向的是数组中的元素,都可以执行下标运算;

④多维数组:数组的数组

当一个数组的元素仍然是数组时,通常使用两个维度来定义它:一个维度表示数组本身大小,另一个维度表示其元素大小;

对二维数组,把第一个维度称作行,第二个维度称作列;

C++编程基础知识二

5、表达式:表达式由一个或多个运算对象组成;

①当一个对象被用作右值时,用的是对象的值;

当对象被用作左值时,用的是对象的身份;

②优先级和结合律决定运算对象组合的方式;

③逻辑与和逻辑或-短路求值:

对逻辑与,当且仅当左侧运算对象为真时才对右侧运算对象求值;

对逻辑或,当且仅当左侧运算对象为假时才对右侧运算对象求值;

④++,--运算符:

前置版本:int i=0,j;j=++i;//j=1,i=1;

后置版本:int i=0,j;j=i++;//j=1,i=2;

【注】:除非必须,否则不用递增递减运算符的后置版本;

6、运算符:

①成员访问运算符:点运算符和箭头运算符;

点运算符:获取类对象的一个成员;

箭头运算符:ptr->mem 等价于(*ptr).mem;

②条件运算符:cond?expr1:expr2;

③位运算符:

④移位运算符:

左移运算符<<:在右侧插入值为0的二进制位;

右移运算符>>:如果运算对象是无符号类型,在左侧插入0;如果是带符号类型,视环境而定;

⑤sizeof()返回一条表达式或一个类型名字所占的字节数;

对char或者类型为char的表达式执行sizeof运算,结果得1;

对指针执行sizeof运算得到指针本身所占空间的大小;

对解引用指针执行sizeof运算得到指针指向对象所占空间的大小,指针不需要有效;

对数组执行sizeof运算得到整个数组所占空间的大小,等价于把数组中所有的元素各执行一个sizeof运算并将结果求和;

对string对象或vector对象执行sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素用了多少空间;

【注】:由于sizeof运算能得到整个数组的大小,故可以计算数组的大小除以单个元素的大小即可得到数组中元素的个数;size_t sz=sizeof(ia)/sizeof(*ia);

⑥强制类型转换cast:将对象的一种类型转换成另一种类型;

命名的强制类型转换:static_cast,dynamic_cast,const_cast,reinterpret_cast;

static_cast:任何具有明确定义的类型转换,只要不包括const,都可以使用static_cast;

const_cast:只能改变运算对象的底层const;只有const_cast能改变表达式的常量属性;

reinterpret_cast:为运算对象的位模式提供较低层次上的重新解释;

C++编程基础知识二

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢