斑马日记2026.3.13

前言

进入大二下以后,事情变得特别多,看起来什么都没变了,但其实什么都变了,经过寒假期间的持续学习,虽然没有让我学到太多东西,或者"弯道超车"哈哈,但我似乎找到了属于自己的节奏,我不再被任何人的内卷或者摆烂影响,我认为我像一个雪球一样,慢慢地滚动着。希望在接下来的每一天我都可以进步一点点,找到真正适合我的学习节奏,大刀阔斧地干,酣畅淋漓地学。

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,原本申请的空间都没有了。

相关推荐
fie888914 小时前
免疫优化算法在物流配送中心选址中的应用
算法·数学建模
王老师青少年编程14 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【部分背包问题】:部分背包问题
c++·算法·贪心·csp·信奥赛·部分背包问题
九思十安14 小时前
HNU2026-算法设计与分析-笔记 3 摊还分析
笔记·算法
嘻嘻哈哈樱桃14 小时前
牛客经典101题题解集--哈希
java·数据结构·python·算法·leetcode·职场和发展·哈希算法
自我意识的多元宇宙14 小时前
【数据结构】 红黑树
数据结构·算法
wayz1114 小时前
Day 15 编程实战:KMeans聚类与股票风格分类
算法·机器学习·分类·kmeans·聚类
不知名的老吴14 小时前
数据结构与算法之排序算法
算法·排序算法
Brilliantwxx15 小时前
【算法题】日期类算法题
开发语言·c++·笔记·程序人生·算法
穿条秋裤到处跑15 小时前
每日一道leetcode(2026.04.27):检查网格中是否存在有效路径
算法·leetcode·职场和发展
我不是懒洋洋15 小时前
【数据结构】二叉树链式结构的实现(二叉树的遍历、使用二叉树的基本方法、二叉树的创建和销毁)
c语言·数据结构·c++·经验分享·算法·链表·visual studio