算法题
最长公共前缀
14. 最长公共前缀 - 力扣(LeetCode)
class Solution {
public:string longestCommonPrefix(vector<string>& strs) {if(strs.size()==0)return "";//如果数组为空,直接返回空字符串string ans = strs[0];//ans先存放数组第一个元素string str="" ;//定义各一个空串,一会承接相同的前缀for (int i = 0; i < strs.size(); i++) {//遍历数组if(strs[i]=="")return "";//如果数组中有空串,直接返回空串int n = min(ans.length(), strs[i].length()); //比较 for(int j=0;j<n;j++){ if (ans[j] != strs[i][j]) {//字符不相等,直接跳出循环break;} str+=ans[j];//相等的存放在str中}ans=str;//将相同的字符赋给ans继续去比较str="";//将字符串str置为空if(ans.length()==0){return "";//当ans为空的时候直接返回“”;}}return ans;//返回公共的前缀}
};
基础知识
C++函数的返回值在内存中的传递过程
当函数被调用时,系统会为该函数的执行创建一个新的栈帧。栈帧是内存中用于存储函数调用信息的连续区域:局部变量、参数、返回地址、保存寄存器
C/C++函数返回值会使用eax寄存器来传递
函数的返回机制依赖于函数的返回类型。
对于基本数据类型,返回值通常通过寄存器传递,或者如果返回值较大,可能会通过拷贝一个临时对象来传递。
对于大型对象或结构体,返回时可能会涉及到复制构造函数(如果返回值是值传递)或移动构造函数的调用,以优化性能。
对于引用或指针类型的返回值,返回的是地址,不涉及复制或移动操作。减少调用拷贝构造。
虚拟内存,为什么要使用虚拟内存,虚拟内存可能比物理内存大吗
操作系统将内存分分成用户态与内核态
内存又分为物理内存与与虚拟内存
如果在物理内存下,在同一个内存中写入两个程序是不可能的,这会导致程序崩溃,这就需要操作系统为进程分配独立的虚拟地址来进行,各个进程都有自己的地址,互不干扰,这些进程不能访问操作系统的物理内存地址,操作系统会提供一种机制来解决虚拟地址怎么落到物理内存里。
程序中用的地址都是虚拟内存地址,实际上硬件里边的空间是物理内存地址。
虚拟内存地址是由cpu芯片中的MMU进行映射到物理内存地址