string 和 vector 初探

标准库类型 string

string 表示可变长的字符序列。是C++标准库类型的一部分,拥有许多优秀的性能。

定义 string 对象时如未人为初始化编译器会默认初始化为空字符串。

string 对象的初始化有很多种,大体分为两类:拷贝初始化和直接初始化。所有用等号(=)的初始化都为拷贝初始化,相反不是等号则为直接初始化。当初始值只有一个时,拷贝和直接初始化都可,但需要用到多个值的时候,一般来说只能使用直接初始化。建议尽量使用直接初始化。

string s1;//默认初始化为空串string s2=s1;//拷贝初始化,s2是s1的副本string s3(n,"c");//直接初始化,s3为连续n个c构成的字符串

在读取 string 对象时,string 对象会自动忽略开头的空白(空格,制表符,执行符等)并从第一个真正的字符开始读取直到遇见下一个空白为止。

getline 函数可以读取一整行包括字符串中的空白,getline函数的参数是一个输入流和一个 string 对象。将输入流中读取的一行字符串存入 string 对象中。当 getline 遇到转行符时就结束并返回结果(getline 是读取转行符的,但是结果中是将转行符丢弃的)。

string line;while(getline(cin,line))//反复读取输入流,知道遇见结束标志EOFcout<<line<<endl;输出每一行并手动添加换行操作

string 的 size()(string 类的封装函数) 操作返回 string 对象的长度,返回类型为 string::size_type,这是一个神秘的类型,只知道它是一个无符号整形,并且能存放下任何 string 对象的大小。既然函数返回值是无符号整数就不能与有符号数进行比较,,因为当无符号数与负值比较时,负值会自动转变为一个比较大的无符号数,使比较结果出错。

string line;auto len = line.size();//len 是size_type类型,值为0,line 是个空串

string 类定义了比较字符串的运算符,当两个 string 对象完全相同时,这两个string 相等(==);

其他比较如 <‘,<= ,> ,>= ,string 对象遵循两个原则:

1.当一个string 对象A长度小于 string 对象B长度,且A与B于A长度上的字符皆相同时,A < B;

2.如果两个 string 对象在某些对应的位置上不一致,则string 对象比较的结果是第一个相异字符比较的结果(遵循大小写敏感的字典序)。

string str = "Hello";string phrase = "Hello World";string slang = "Hiya";//由规则 1 判断,phrase 大于 str;由规则 2 判断 phrase 大于 str 和 slang

string 对象重载了+ 运算符,通过 + 运算符可以实现 string 与string ,字面值及字符串字面值之间的衔接。(字符串字面值与 string 是不同的类型)字面值及字符串字面值不能直接相加,因为 + 运算符是封装与 string 类中的。

string s1("Hello") , s2(" World");string s3 = s1 + s2;//s3 的内容是 Hello Worldstring s4 = s1 + ',';//s4 的内容是 Hello,string s5 = s1 + ", World";//s5 的内容是 Hello, World

标准库类型 vector

vector 表示同一种对象的集合。vector 是一个类模板,vector 本身不是类,但却是编译器生成类的说明,当使用模板实例化类时必须指明实例化成何种类型,vector 使用尖括号 <> 来指明实例化类型。vector 能容纳绝大多数对象作为其元素(引用除外,引用不是对象),甚至 vector 本身。

vector 的初始化同 string 相同,另外C++11 还为 vector 添加了列表初始化的方法。用花括号括起来的0个或多个初始元素值被赋给 vector 对象。

vector<string> vs = {"cs","dn"};

列表初始化会给阅读带来混淆,因为列表中的值既可以表示初始值也可以表示元素数量,编译器会首先认为是列表初始化(将列表中的值当作初始值来处理),如果不行,才会考虑其他初始化方式。

vector<int> v1(10);//v1有10个元素,都为0vector<int> v2{10};//v2有1个元素,为10vector<int> v3(10,1);//v3有10个元素,都为1vector<int> v4{10,1};//v4有两个元素,10和1vector<string> v5{"Hello","Hi"};//v5有两个元素,列表初始化vector<string> v6{10};//v6有10个空串元素

向 vector 中添加元素必须使用 vector 的成员函数 push_back() ,将一个值添加到 vector 的末尾。的元素。下标运算符的使用必须确保其在合理范围内(大于 0 且小于容量)。

vector若要使用 size_type 类型必须明确指出其是由哪一类型定义的。

vector<int>::size_type;//正确vector::size_type;//错误

vector 对象中元素的只有在元素本身支持比较运算符的基础上才能进行比较(有些自定义类并没有定义比较运算符)。

范围 for 语句

范围 for 语句遍历给定范围内的每一个元素,并对序列中的每一个元素进行某种操作。使用范围 for 语句可以无需关系是否超出有效范围。

string str("Hello World");for(auto c : str)//遍历 str 每一个字符元素cout<< c <<endl;

版权声明:本文为博主原创文章,未经博主允许不得转载。

生活中若没有朋友,就像生活中没有阳光一样

string 和 vector 初探

相关文章:

你感兴趣的文章:

标签云: