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

相关推荐
NGC_66113 小时前
ArrayList扩容机制
java·前端·算法
xsyaaaan7 小时前
leetcode-hot100-双指针:283移动零-11盛最多水的容器-15三数之和-42接雨水
算法·leetcode
炽烈小老头10 小时前
【每天学习一点算法 2026/03/08】相交链表
学习·算法·链表
一碗白开水一10 小时前
【工具相关】OpenClaw 配置使用飞书:打造智能飞书助手全流程指南(亲测有效,放心享用)
人工智能·深度学习·算法·飞书
仰泳的熊猫11 小时前
题目2194:蓝桥杯2018年第九届真题-递增三元组
数据结构·c++·算法
Tisfy11 小时前
LeetCode 1888.使二进制字符串字符交替的最少反转次数:前缀和O(1)
算法·leetcode·字符串·题解
滴滴答滴答答12 小时前
机考刷题之 9 LeetCode 503 下一个更大元素 II
算法·leetcode·职场和发展
飞Link12 小时前
梯度下降的优化算法中,动量算法和指数加权平均的区别对比
人工智能·深度学习·算法
啊哦呃咦唔鱼12 小时前
LeetCode hot100-15 三数之和
数据结构·算法·leetcode