【基础知识补充】标准库类型:string和vector
标准库类型:string
string 表示可变长的字符序列
/*** ---------------------------------------------------------------------------* 一、定义和初始化string对象:* 拷贝初始化:使用等号"="初始化一个变量。* 直接初始化:使用圆括号"()",里面放初始值。* * 多值初始化*/
string s1,s6; // 默认初始化,是一个空字符串
string s2 = "hello"; // 【拷贝初始化】等价于:s2("hello"); s2是该字符串字面值的副本
string s3(s2); // 【直接初始化】等价于:s3 = s2; s3是s2的副本
string s4(10,'c'); // 【直接初始化-多值】s4的内容是 cccccccccc。由连续10个字符c组成的串
string s5 = string(10,'d'); // 【拷贝初始化-多值】显式的创建一个(临时)对象拷贝给s5 /*** ---------------------------------------------------------------------------* 二、string对象上的操作:* 读写string对象:* os << s -->将s写到输出流os当中,返回os* is >> s -->从输入流is中读取字符串赋给s,遇到空白停止,返回is* 读取一整行:getline(is,s)* getline函数代替原来的 >> 运算符。参数是一个输入流和一个string对象。遇到换行符停止* 判断s对象是否为空:s.empty() * 返回一个布尔值。* 返回s对象的字符长度:s.size() 、s.length()* 返回一个string::size_type类型的值* 返回s中第n个字符的引用:v[n]* 位置下标从0开始* 比较string对象:比较对象中的字符,依照(大小写敏感的)字典顺序* ==,!=,>,>=,<,<=* 比较规则:1、两个string对象中字符相同长度不同,比长度。如"qwerr">"qwer"* 2、两个string对象某些对应的位置上不一致,则比较第一对相异字符。如"cba"<"ca"* 拼接string对象:* 两个string对象相加* 字面值和string对象相加**/
cin >> s6; // 键盘输入字符赋值给s6
cout << s6 <<endl; // 输出s6对象内容cout << s1.size() <<endl; // 输出:0
cout << s1.empty() <<endl; // 输出:1,代表true,为空
cout << s2.size() << endl; // 输出:5
cout << s2.length() << endl; // 输出:5
cout << s2.empty() <<endl; // 输出:0,代表false,不为空cout << s2[2] <<endl; // 输出:l,下标从0开始cout << (s2 == s3) << endl; // 输出:1,代表true,两个对象相等
cout << (s2 == s4) << endl; // 输出:0,代表false,两个对象不相等
cout << (s4 < s5) << endl; // 输出:1,代表true,s4 小于 s5【比较字符大小】cout << (s2 + s4) << endl; // 输出:hellocccccccccc
cout << (s2 + " hi") << endl; // 输出:hello hi/*** ---------------------------------------------------------------------------* 三、处理string对象中的字符* 判断某字符特性,引入cctype头文件*/
标准库类型:vector(容器)
1、vector表示对象的集合,其中所有对象的类型都相同。但不包含引用(引用不是对象)
2、集合中的每个对象都有一个与之对应的索引(即下标),索引用于访问对象
3、vector是一个类模板。【编译器根据模板创建类或函数的过程称为实例化】
/** * ---------------------------------------------------------------------------* 一、定义和初始化vector对象* 拷贝初始化:使用等号"="初始化一个变量。* 直接初始化:使用花括号"{}",里面放列表初始值。* 提供一个类内初始值:*/
vector<int> v1; //默认初始化,是一个空vector,元素类型是int型
vector<int> v2{1,2,3,4,5,6,7}; //等价于:v2 = {1,2,3,4,5,6,7}; 每个元素被赋予了初始值
vector<int> v3(v2); //等价于:v3 = v2; v3是v2的副本
vector<string> v4(7,"hi"); //等价于:v4 = vector(10,"hi"); 包含了7个重复的元素,每个元素的值都被初始化为"hi"
vector<int> v5(7); //7个元素,每个都初始化为0/** * ---------------------------------------------------------------------------* 二、vector对象上的操作* 判断v对象是否为空:v.empty()* 返回一个布尔值* 返回v中元素的个数:v.size()* 返回一个vector<int>::size_type类型的值* 返回v中第n个位子上的元素的引用:v[n]* 位置下标从0开始* 比较vector对象:比较对象中的元素值,依照(大小写敏感的)字典顺序* ==,!=,>,>=,<,<=* * 向vector对象中添加元素:v.push_back()* 把一个值当成vector对象的尾元素压到对象尾端* 隐含要求:如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环* */
cout << v1.size() <<endl; // 输出:0
cout << v1.empty() <<endl; // 输出:1,代表true,为空
cout << v2.size() << endl; // 输出:7
cout << v2.empty() <<endl; // 输出:0,代表false,不为空cout << v2[5] <<endl; // 输出:6,下标从0开始cout << (v2 == v3) << endl; // 输出:1,代表true,两个对象相等
cout << (v2 == v5) << endl; // 输出:0,代表false,两个对象不相等
cout << (v2 < v5) << endl; // 输出:0,代表false,v4 大于 v5【比较元素1值大小】v2.push_back(8); //v2中添加元素8for(int &i : v2) //对于v中的每个元素(注意:i是一个引用,i值改变对应容器中元素值改变)i *= i; //求元素值的平方 【*= 把运算符左右侧对象相乘,结果存入左侧运算对象】for(int i : v2)cout<< i<< " "; //输出:1 4 9 16 25 36 49 64