C++字符串、向量、数组(笔记一)

一、string对象的初始化

string s1  //s1是空串
string s2(s1) //s2是s1的副本
string s2=s1 //同上
string s3("value") //s3是字面值”value”,(当然还有个空字符串)
string s3="value" //同上
string s4=(n, ’c’) //把s4初始化由连续n个字符c组成的串

二、string对象的一些操作

当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保加法运算符两侧的运算对象至少有一个是string

string s1 = "哈哈哈哈哈啊";
string s4 =s1 +”,”; //正确
string s5 =s1+”hello”+”,” //正确,相当于先进行第一个加号的运算得到一个string再进行第二个
string s6 =”hello”+”,”+ s1 //错误,第一个加号的运算,两个加数都不是string

处理单个字符时:
处理每个字符
for(auto var: str) //适用于不改变原字符串的字符,只取值做处理
for(auto &var: str) //可以改变原字符串的每个字符

    下标运算符[]接收的参数是string::size_type类型的值,这个参数表示要访问的字符的位置,返回值是该位置上字符的引用。string的下标从0算起,比如str[0]是第一个字符,str[1]是第二个字符,str[str.size()-1]是最后一个字符。

三、标准库vector

    标准库类型vector表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector“容纳着”其他对象,所以它也常被称作容器
    C++语言中既有类模板,也有函数模板,其中vector是一个类模板。模板本身不是类或者函数,相反可以将模板看作为编译器生成类或者函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化,当使用模板时,需要值出编译器应把类或函数实例化成何种类型,即在模板名字后面跟一对尖括号,在括号内填类型。

vector<int> ivec;      //ivec保存int类型的对象
vector<Sales_item> Sales_vec;  //Sales_vec保存Sales_item类型的对象
vector<vector<int>>  f;    //该向量的元素是vector对象

定义和初始化vector对象

列表初始化值还是元素数量:

vector<int> v1(10);   //v1有10个元素,每个的值都0
vector<int> v2{10};   //v2有1个元素,其值为10
vector<int> v3(10,1);  //v3有10个元素,其值都为1
vector<int> v4{10,1}  //v4有2个元素,其值分别为10和1

    要想列表初始化vector对象,花括号里的值必须与元素类型相同。显然不能用int初始化string对象,所以v7和v8提供的值不能作为元素的初始值。确认无法执行列表初始化后,编译器会尝试用默认值初始化vector对象,例:

vector<string> v5{“hi”};//列表初始化
vector<string> v6(“hi”);//错误
vector<string> v7{10};//编译器确认无法执行列表初始化,尝试用默认值初始化,v7有10个默认初始化的元素
vector<string> v8{10,”hi”}//编译器确认无法执行列表初始化,尝试用默认值初始化,v8有10个值为“hi”的元素

vector的一些操作

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注