2.1 - 反转字符串中的单词 && 每个进程的内存里包含什么

目录

1.反转字符串中的单词

a.核心思想

b.思路

c.步骤

2.每个进程的内存里包含什么


1.反转字符串中的单词

151. 反转字符串中的单词 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-words-in-a-string/

cpp 复制代码
class Solution {
public:
    string reverseWords(string s) {
        vector<string> words;
        stringstream ss(s);
        string word;

        while (ss >> word) 
        {
            words.push_back(word);
        }

        reverse(words.begin(), words.end());
        string result;

        for (size_t i = 0; i < words.size(); ++i)
        {
            result += words[i];
            if (i < words.size() - 1) 
                result += " ";
        }
        return result;
    }
};

a.核心思想

先将字符串按单词分割成多个子串,然后将这些子串逆序,最后将逆序后的子串用单个空格连接起来。

b.思路

① 使用字符串流或者手动遍历字符串的方式提取出每个单词。

② 将提取出的单词存储在一个容器(如 vector)中。

③ 逆序该容器中的单词。

④ 使用空格将逆序后的单词连接成一个新的字符串。

c.步骤

① 初始化一个空的 vector 用于存储单词。

② 遍历字符串,跳过前导空格,找到单词的起始位置。

③ 逐个读取字符,直到遇到空格,将读取到的单词存入 vector

④ 继续跳过空格,重复步骤 3 直到字符串结束。

⑤ 逆序 vector 中的单词。

⑥ 使用空格将逆序后的单词连接成字符串并返回。

2.每个进程的内存里包含什么

每个进程的内存(即进程的地址空间)通常包含多个不同的区域(或称为段),每个区域存储特定类型的数据或代码。以下是进程内存的主要组成部分及其概括:

  1. 代码段(Text Segment):

    1. 存储程序的可执行指令(即机器代码)。

    2. 通常是只读的,以防止程序意外修改自己的指令。

    3. 在进程的整个生命周期内保持不变。

  2. 数据段(Data Segment):

    1. 存储全局变量和静态变量。

    2. 可以进一步分为初始化数据段(.data)和未初始化数据段(.bss)。

    3. 初始化数据段包含在程序编译时已初始化的全局和静态变量。

    4. 未初始化数据段包含在程序编译时未初始化的全局和静态变量,通常在程序启动时被初始化为零。

  3. 堆( Heap ):

    1. 动态分配的内存区域,用于存储在程序运行时动态分配的数据。

    2. 程序员通过调用如 malloc(在C中)或 new(在C++中)等函数来从堆中分配内存。

    3. 堆的大小在进程的生命周期内可以动态增长或缩小。

  4. 栈(Stack):

    1. 用于存储函数的局部变量、函数参数、返回地址以及调用链信息。

    2. 栈是一个后进先出(LIFO)的数据结构。

    3. 每当函数被调用时,一个新的栈帧(stack frame)被压入栈顶,包含该函数的局部变量和参数。

    4. 当函数返回时,其栈帧被弹出栈顶。

  5. 共享库 内存映射 (Memory Mapping Segment):

    1. 存储共享库(如动态链接库或共享对象)的代码和数据。

    2. 允许多个进程共享同一份库代码,节省内存。

  6. 内核结构(Kernel Data Structures,不在用户空间中):

    1. 虽然严格来说不属于进程的用户空间内存,但进程在内核空间中也有相关的数据结构,如进程描述符(process descriptor)、页表(page tables)等。

    2. 这些数据结构由操作系统内核管理,用于控制进程的执行和访问资源。

概括来说,进程的内存包含代码、数据、动态分配的内存(堆)、函数调用信息(栈)、共享库以及相关的内核数据结构。这些区域共同支持进程的执行和资源管理。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

相关推荐
We་ct3 小时前
LeetCode 73. 矩阵置零:原地算法实现与优化解析
前端·算法·leetcode·矩阵·typescript
程序员泠零澪回家种桔子3 小时前
OpenManus开源自主规划智能体解析
人工智能·后端·算法
请注意这个女生叫小美3 小时前
C语言 实例20 25
c语言·开发语言·算法
好学且牛逼的马3 小时前
【Hot100|22-LeetCode 206. 反转链表 - 完整解法详解】
算法·leetcode·矩阵
欧阳x天3 小时前
STL讲解(七)——list容器的模拟实现
c++·windows·list
hans汉斯3 小时前
国产生成式人工智能解决物理问题能力研究——以“智谱AI”、“讯飞星火认知大模型”、“天工”、“360智脑”、“文心一言”为例
大数据·人工智能·算法·aigc·文心一言·汉斯出版社·天工
枫叶丹43 小时前
【Qt开发】Qt系统(十一)-> Qt 音频
c语言·开发语言·c++·qt·音视频
v_for_van3 小时前
力扣刷题记录3(无算法背景,纯C语言)
c语言·算法·leetcode
ValhallaCoder3 小时前
hot100-矩阵
数据结构·python·算法·矩阵