前言
进入大二下以后,事情变得特别多,看起来什么都没变了,但其实什么都变了,经过寒假期间的持续学习,虽然没有让我学到太多东西,或者"弯道超车"哈哈,但我似乎找到了属于自己的节奏,我不再被任何人的内卷或者摆烂影响,我认为我像一个雪球一样,慢慢地滚动着。希望在接下来的每一天我都可以进步一点点,找到真正适合我的学习节奏,大刀阔斧地干,酣畅淋漓地学。
string部分的复习
string的对象创建
1.无参构造
cpp
string s1;
2.初始化列表
cpp
string s2({'a','b','c','d'});//s2="abcd";
3.字符串初始化
cpp
string s3("asd");
4.字符串的前n个元素
cpp
string s5("abcdef",5);//s5="abcde";
5.拷贝构造
cpp
string s6(s5);//s6=s5="asd";
string的赋值
cpp
//1
string s1="abc";
//2
string s2=s1;
//3
string s3='s';
//4
string s4.assign("abc");
//5.
string s5.assign("abcdef",3);
//6
string s6.assign(5,'a');//aaaaa
//7
string s7.assign(s6);//aaaaa
string的拼接
cpp
//1
string s11 = "我";
string s22 = "真";
s11 += s22;//我真
//2
s11 = s11 + "是";//我真是
//3
string s33 = "个笨蛋";
//s11.append("个笨蛋", 2);//如果append的第一个参数是值,后面一个数字是从0开始取几个字符
s11.append(s33, 0,2);//如果append的第一个参数是存储值的变量,后面一个数字就是拼接从几号索引开始直到最后
cout << s11<<endl;
string s44 = "天";
s11.append(s44);//我真是个天
string s55 = "天生我材必有用";
s11.append(s55, 6, 2);//我真是个天材
cout << s11;
string的比较
cpp
string s1="aaa";
string s2="aab";
s1.compare(s2);//-1
s2.compare(s1);//1
s1.compare(s1);//0
s1==s1;//1
s1!=s1;//0
string的随机访问
cpp
string s1="abc";
s1[0]='c';//这个在debug模式会报错
s1.at(2)='a';//这个在release和debug模式都会报错
string的数据插入
cpp
string s1("heworld");
s1.insert(2,2,'l');//hellworld
s1.insert(4,"o");//helloworld//或者s1.insert(4,1,'o');
s1.insert(s1.begin(),'h');//hhelloworld//或者s1.insert(s1.begin(),1,'h');
string的数据删除
cpp
string s1;
s1 = "hello woooooooorld";
s1.erase();//全删
cout << s1<<endl;
s1.erase(7);//从索引7开始删除直到最后一个元素
cout << s1 << endl;
s1.erase(7, 7);//从索引7开始删除7个
cout << s1 << endl;
s1.erase(s1.begin());//传入迭代器,只删除迭代器指向的一个元素
cout << s1 << endl;
s1.erase(s1.begin() + 7, s1.begin() + 14);//删除区间的左右端点,但是左闭右开,删除左节点,但不删除右节点
cout << s1 << endl;
string的数据查找
cpp
string s1 = "hello wooooorld";
cout << s1.find("ooooo") << endl;//如果找到,返回字符串首字符的索引
cout << (int)s1.find("ooooo", 8) << endl;//数字代表从几号索引开始找,找不到返回-1,找到同上
cout << s1.find('o') << endl;//返回目标字符出现的第一次索引
cout << s1.find('o', 6) << endl;//同上
cout << s1.rfind("oo") << endl;//从右开始找,索引返回里面最小的
string的数据替换
cpp
string s1 = "hello woooooorld";
s1.replace(7, 6, "o");//从7号索引位开始,将6个元素替换为一个o
cout << s1 << endl;
s1.replace(s1.begin() + 7, s1.begin() + 13, "o");//跟上面一样,只不过迭代器是左闭右开
cout << s1 << endl;
s1.replace(s1.begin() + 7, s1.begin() + 13, "ooooooo",1);//多的一个数字代表取字符串的前几个替换
cout << s1 << endl;
string的子串获取
cpp
string s1;
s1 = "Hello woooorld";
string subStr = s1.substr(7,4);//从7号索引位开始获取4个字符组成的子串
cout << subStr << endl;
收获
1.由size()获得的数组长度,参数类型为size_t,不能直接跟整型变量int,long long int等做比较运算,我们可以采用,将数组长度强转成整型的方式:
cpp
vector<vector<long long>> ret;
ret.assign(1e5,vector<long long>());
long long j = 0;
j < (long long)ret[i].size();
这里面的数组长度经过强转才可以与j进行比较运算;
2.vector数组在进行自主扩容的时候,新多出来没有内容的部分,会默认赋值为0;
3.clear()在使用的时候会把数组的大小size变为0,这会导致容量也变成0,原本申请的空间都没有了。